From 171f08579738253a0b9838a34552b3e5010c5d09 Mon Sep 17 00:00:00 2001 From: bragejahren <70642183+bragejahren@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:39:15 +0200 Subject: [PATCH] NAV-22311: Bestemmer arbeidsfordelingsenhet utenfor OpprettOppgave-task (#4799) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Favro: [NAV-22311](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-22311) ### 💰 Hva skal gjøres, og hvorfor? Tidligere tilpasset/justerte vi arbeidsfordeling på behandling i `OpprettOppgaveTask` slik at BehandleSak-oppgave fikk korrekt kombinasjon av enhet og saksbehandler. I og med at `OpprettOppgaveTask`, kjøres asynkront, blir ikke arbeidsfordeling på behandling oppdatert før saksbehandler blir rutet til "Registrer søknad"-steget. Dette fører til at det ser ut som at behandlingen er satt på feil enhet, selv om den egentlig er riktig (dukket opp korrekt dersom saksbehandler oppdaterer siden). Tilpasser derfor arbeidsfordelingen i henhold til saksbehandlers tilganger tidligere, og utenfor `OpprettOppgaveTask` i `fastsettBehandlendeEnhet`-metoden i `ArbeidsfordelingService`. Dette gir også mer mening da det er i `fastsettBehandlendeEnhet` vi henter "geografisk behandlende enhet", som vi nå validerer tilgangen til. ### ✅ Checklist - [x] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. - [ ] Jeg har skrevet tester. --- .../familieintegrasjoner/IntegrasjonClient.kt | 7 +- .../oppgave/OppgaveArbeidsfordelingService.kt | 122 ----- .../integrasjoner/oppgave/OppgaveService.kt | 39 +- .../ArbeidsfordelingService.kt | 25 +- .../TilpassArbeidsfordelingService.kt | 111 +++++ .../ArbeidsfordelingP\303\245Behandling.kt" | 3 + .../familie/ba/sak/common/DataGenerator.kt | 19 + .../ba/sak/config/IntegrasjonClientMock.kt | 3 + .../IntegrasjonClientTest.kt | 7 +- .../OppgaveArbeidsfordelingServiceTest.kt | 448 ------------------ .../oppgave/OppgaveServiceTest.kt | 82 +--- .../ArbeidsfordelingServiceTest.kt | 109 +++++ .../TilpassArbeidsfordelingServiceTest.kt | 447 +++++++++++++++++ .../ArbeidsfordelingIntegrationTest.kt | 6 +- 14 files changed, 740 insertions(+), 688 deletions(-) delete mode 100644 src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingService.kt create mode 100644 src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingService.kt delete mode 100644 src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingServiceTest.kt create mode 100644 src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingServiceTest.kt create mode 100644 src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingServiceTest.kt diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt index 5ddbf85be7a..76e02efc009 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt @@ -11,6 +11,7 @@ import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.LogiskVedleggRe import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.LogiskVedleggResponse import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.OppdaterJournalpostRequest import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.OppdaterJournalpostResponse +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet.Companion.erGyldigBehandlendeBarnetrygdEnhet import no.nav.familie.ba.sak.kjerne.brev.mottaker.ManuellAdresseInfo import no.nav.familie.ba.sak.kjerne.personident.Aktør import no.nav.familie.ba.sak.task.DistribuerDokumentDTO @@ -235,15 +236,15 @@ class IntegrasjonClient( } } - fun hentEnheterSomNavIdentHarTilgangTil(navIdent: NavIdent): List { + fun hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent: NavIdent): List { val uri = URI.create("$integrasjonUri/enhetstilganger") - return kallEksternTjenesteRessurs( + return kallEksternTjenesteRessurs>( tjeneste = "enhetstilganger", uri = uri, formål = "Hent enheter en NAV-ident har tilgang til", ) { postForEntity(uri, HentEnheterNavIdentHarTilgangTilRequest(navIdent, Tema.BAR)) - } + }.filter { erGyldigBehandlendeBarnetrygdEnhet(it.enhetsnummer) } } fun opprettOppgave(opprettOppgave: OpprettOppgaveRequest): OppgaveResponse { diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingService.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingService.kt deleted file mode 100644 index d3c74ce4b9c..00000000000 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingService.kt +++ /dev/null @@ -1,122 +0,0 @@ -package no.nav.familie.ba.sak.integrasjoner.oppgave - -import no.nav.familie.ba.sak.common.Feil -import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient -import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet -import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet.Companion.erGyldigBehandlendeBarnetrygdEnhet -import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandling -import no.nav.familie.kontrakter.felles.NavIdent -import org.springframework.stereotype.Service - -@Service -class OppgaveArbeidsfordelingService( - private val integrasjonClient: IntegrasjonClient, -) { - fun finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling: ArbeidsfordelingPåBehandling, - navIdent: NavIdent?, - ): OppgaveArbeidsfordeling = - when (arbeidsfordelingPåBehandling.behandlendeEnhetId) { - BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer -> håndterMidlertidigEnhet4863(navIdent) - BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer -> håndterVikafossenEnhet2103(navIdent) - else -> håndterAndreEnheter(navIdent, arbeidsfordelingPåBehandling) - } - - private fun håndterMidlertidigEnhet4863( - navIdent: NavIdent?, - ): OppgaveArbeidsfordeling { - if (navIdent == null) { - throw Feil("Kan ikke sette ${BarnetrygdEnhet.MIDLERTIDIG_ENHET} om man mangler NAV-ident") - } - val enheterNavIdentHarTilgangTil = - integrasjonClient - .hentEnheterSomNavIdentHarTilgangTil(navIdent) - .filter { erGyldigBehandlendeBarnetrygdEnhet(it.enhetsnummer) } - .filter { it.enhetsnummer != BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer } - if (enheterNavIdentHarTilgangTil.isEmpty()) { - throw Feil("Fant ingen passende enhetsnummer for nav-ident $navIdent") - } - // Velger bare det første enhetsnummeret i tilfeller hvor man har flere, avklart med fag - val nyBehandlendeEnhet = enheterNavIdentHarTilgangTil.first() - return OppgaveArbeidsfordeling( - navIdent, - nyBehandlendeEnhet.enhetsnummer, - nyBehandlendeEnhet.enhetsnavn, - ) - } - - private fun håndterVikafossenEnhet2103( - navIdent: NavIdent?, - ): OppgaveArbeidsfordeling { - if (navIdent == null) { - throw Feil("Kan ikke sette ${BarnetrygdEnhet.VIKAFOSSEN} om man mangler NAV-ident") - } - val harTilgangTilVikafossenEnhet2103 = - integrasjonClient - .hentEnheterSomNavIdentHarTilgangTil(navIdent) - .filter { erGyldigBehandlendeBarnetrygdEnhet(it.enhetsnummer) } - .any { it.enhetsnummer == BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer } - if (!harTilgangTilVikafossenEnhet2103) { - return OppgaveArbeidsfordeling( - null, - BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ) - } - return OppgaveArbeidsfordeling( - navIdent, - BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ) - } - - private fun håndterAndreEnheter( - navIdent: NavIdent?, - arbeidsfordelingPåBehandling: ArbeidsfordelingPåBehandling, - ): OppgaveArbeidsfordeling { - if (navIdent == null) { - // navIdent er null ved automatisk journalføring - return OppgaveArbeidsfordeling( - null, - arbeidsfordelingPåBehandling.behandlendeEnhetId, - arbeidsfordelingPåBehandling.behandlendeEnhetNavn, - ) - } - val enheterNavIdentHarTilgangTil = - integrasjonClient - .hentEnheterSomNavIdentHarTilgangTil(navIdent) - .filter { erGyldigBehandlendeBarnetrygdEnhet(it.enhetsnummer) } - .filter { it.enhetsnummer != BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer } - if (enheterNavIdentHarTilgangTil.isEmpty()) { - throw Feil("Fant ingen passende enhetsnummer for NAV-ident $navIdent") - } - val harTilgangTilBehandledeEnhet = - enheterNavIdentHarTilgangTil.any { - it.enhetsnummer == arbeidsfordelingPåBehandling.behandlendeEnhetId - } - if (!harTilgangTilBehandledeEnhet) { - // Velger bare det første enhetsnummeret i tilfeller hvor man har flere, avklart med fag - val nyBehandlendeEnhet = enheterNavIdentHarTilgangTil.first() - return OppgaveArbeidsfordeling( - navIdent, - nyBehandlendeEnhet.enhetsnummer, - nyBehandlendeEnhet.enhetsnavn, - ) - } - return OppgaveArbeidsfordeling( - navIdent, - arbeidsfordelingPåBehandling.behandlendeEnhetId, - arbeidsfordelingPåBehandling.behandlendeEnhetNavn, - ) - } -} - -data class OppgaveArbeidsfordeling( - val navIdent: NavIdent?, - val enhetsnummer: String, - val enhetsnavn: String, -) { - init { - require(enhetsnummer.length == 4) { "Enhetsnummer må være 4 siffer" } - } -} diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt index 401e6cb1364..d1a18f6ba8a 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt @@ -9,8 +9,10 @@ import no.nav.familie.ba.sak.config.FeatureToggleConfig import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient import no.nav.familie.ba.sak.integrasjoner.oppgave.domene.DbOppgave import no.nav.familie.ba.sak.integrasjoner.oppgave.domene.OppgaveRepository +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.TilpassArbeidsfordelingService import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandlingRepository import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.hentArbeidsfordelingPåBehandling +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.tilArbeidsfordelingsenhet import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingRepository @@ -45,7 +47,7 @@ class OppgaveService( private val opprettTaskService: OpprettTaskService, private val loggService: LoggService, private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService, - private val oppgaveArbeidsfordelingService: OppgaveArbeidsfordelingService, + private val tilpassArbeidsfordelingService: TilpassArbeidsfordelingService, private val arbeidsfordelingPåBehandlingRepository: ArbeidsfordelingPåBehandlingRepository, private val unleashService: UnleashService, ) { @@ -74,24 +76,19 @@ class OppgaveService( eksisterendeOppgave.gsakId } else { - val arbeidsfordelingPåBehandling = + val arbeidsfordelingsenhet = arbeidsfordelingPåBehandlingRepository .hentArbeidsfordelingPåBehandling(behandlingId) + .tilArbeidsfordelingsenhet() val opprettSakPåRiktigEnhetOgSaksbehandlerToggleErPå = unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false) - val oppgaveArbeidsfordeling = + val navIdent = tilordnetNavIdent?.let { NavIdent(it) } + val tilordnetRessurs = if (opprettSakPåRiktigEnhetOgSaksbehandlerToggleErPå) { - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = tilordnetNavIdent?.let { NavIdent(it) }, - ) + tilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, navIdent) } else { - OppgaveArbeidsfordeling( - navIdent = tilordnetNavIdent?.let { NavIdent(it) }, - enhetsnummer = arbeidsfordelingPåBehandling.behandlendeEnhetId, - enhetsnavn = arbeidsfordelingPåBehandling.behandlendeEnhetNavn, - ) + navIdent } val opprettOppgave = @@ -102,10 +99,10 @@ class OppgaveService( oppgavetype = oppgavetype, fristFerdigstillelse = fristForFerdigstillelse, beskrivelse = lagOppgaveTekst(fagsakId, beskrivelse), - enhetsnummer = oppgaveArbeidsfordeling.enhetsnummer, + enhetsnummer = arbeidsfordelingsenhet.enhetId, behandlingstema = behandling.tilOppgaveBehandlingTema().value, behandlingstype = behandling.kategori.tilOppgavebehandlingType().value, - tilordnetRessurs = oppgaveArbeidsfordeling.navIdent?.ident, + tilordnetRessurs = tilordnetRessurs?.ident, behandlesAvApplikasjon = when { oppgavetyperSomBehandlesAvBaSak.contains(oppgavetype) -> "familie-ba-sak" @@ -120,20 +117,6 @@ class OppgaveService( økTellerForAntallOppgaveTyper(oppgavetype) - if (opprettSakPåRiktigEnhetOgSaksbehandlerToggleErPå) { - val erEnhetsnummerEndret = arbeidsfordelingPåBehandling.behandlendeEnhetId != oppgaveArbeidsfordeling.enhetsnummer - - if (erEnhetsnummerEndret) { - arbeidsfordelingPåBehandlingRepository.save( - arbeidsfordelingPåBehandling.copy( - behandlendeEnhetId = oppgaveArbeidsfordeling.enhetsnummer, - behandlendeEnhetNavn = oppgaveArbeidsfordeling.enhetsnavn, - manueltOverstyrt = false, - ), - ) - } - } - opprettetOppgaveId } } diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingService.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingService.kt index 0933b267adf..90a75ba0363 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingService.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingService.kt @@ -3,6 +3,7 @@ package no.nav.familie.ba.sak.kjerne.arbeidsfordeling import no.nav.familie.ba.sak.common.Feil import no.nav.familie.ba.sak.common.PdlPersonKanIkkeBehandlesIFagsystem import no.nav.familie.ba.sak.common.secureLogger +import no.nav.familie.ba.sak.config.FeatureToggleConfig import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.domene.Arbeidsfordelingsenhet import no.nav.familie.ba.sak.integrasjoner.oppgave.OppgaveService @@ -10,14 +11,18 @@ import no.nav.familie.ba.sak.integrasjoner.pdl.PersonopplysningerService import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandling import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandlingRepository import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.hentArbeidsfordelingPåBehandling +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.tilArbeidsfordelingsenhet import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlagRepository import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn import no.nav.familie.ba.sak.kjerne.logg.LoggService import no.nav.familie.ba.sak.kjerne.personident.Aktør import no.nav.familie.ba.sak.kjerne.personident.PersonidentService +import no.nav.familie.ba.sak.sikkerhet.SikkerhetContext import no.nav.familie.ba.sak.statistikk.saksstatistikk.SaksstatistikkEventPublisher +import no.nav.familie.kontrakter.felles.NavIdent import no.nav.familie.kontrakter.felles.personopplysning.ADRESSEBESKYTTELSEGRADERING +import no.nav.familie.unleash.UnleashService import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -32,6 +37,8 @@ class ArbeidsfordelingService( private val integrasjonClient: IntegrasjonClient, private val personopplysningerService: PersonopplysningerService, private val saksstatistikkEventPublisher: SaksstatistikkEventPublisher, + private val tilpassArbeidsfordelingService: TilpassArbeidsfordelingService, + private val unleashService: UnleashService, ) { @Transactional fun manueltOppdaterBehandlendeEnhet( @@ -73,15 +80,7 @@ class ArbeidsfordelingService( val aktivArbeidsfordelingPåBehandling = arbeidsfordelingPåBehandlingRepository.finnArbeidsfordelingPåBehandling(behandling.id) - val forrigeArbeidsfordelingsenhet = - if (aktivArbeidsfordelingPåBehandling != null) { - Arbeidsfordelingsenhet( - enhetId = aktivArbeidsfordelingPåBehandling.behandlendeEnhetId, - enhetNavn = aktivArbeidsfordelingPåBehandling.behandlendeEnhetNavn, - ) - } else { - null - } + val forrigeArbeidsfordelingsenhet = aktivArbeidsfordelingPåBehandling?.tilArbeidsfordelingsenhet() val oppdatertArbeidsfordelingPåBehandling = if (behandling.erSatsendring()) { @@ -91,7 +90,13 @@ class ArbeidsfordelingService( aktivArbeidsfordelingPåBehandling, ) } else { - val arbeidsfordelingsenhet = hentArbeidsfordelingsenhet(behandling) + val arbeidsfordelingsenhet = + if (unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false)) { + val arbeidsfordelingsenhet = hentArbeidsfordelingsenhet(behandling) + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler(arbeidsfordelingsenhet, NavIdent(SikkerhetContext.hentSaksbehandler())) + } else { + hentArbeidsfordelingsenhet(behandling) + } when (aktivArbeidsfordelingPåBehandling) { null -> { diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingService.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingService.kt new file mode 100644 index 00000000000..7730886410e --- /dev/null +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingService.kt @@ -0,0 +1,111 @@ +package no.nav.familie.ba.sak.kjerne.arbeidsfordeling + +import no.nav.familie.ba.sak.common.Feil +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.domene.Arbeidsfordelingsenhet +import no.nav.familie.kontrakter.felles.NavIdent +import org.springframework.stereotype.Service + +@Service +class TilpassArbeidsfordelingService( + private val integrasjonClient: IntegrasjonClient, +) { + fun tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet: Arbeidsfordelingsenhet, + navIdent: NavIdent?, + ): Arbeidsfordelingsenhet = + when (arbeidsfordelingsenhet.enhetId) { + BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer -> håndterMidlertidigEnhet4863(navIdent) + BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer -> håndterVikafossenEnhet2103(navIdent) + else -> håndterAndreEnheter(navIdent, arbeidsfordelingsenhet) + } + + fun bestemTilordnetRessursPåOppgave( + arbeidsfordelingsenhet: Arbeidsfordelingsenhet, + navIdent: NavIdent?, + ): NavIdent? = + if (harSaksbehandlerTilgangTilEnhet(enhetId = arbeidsfordelingsenhet.enhetId, navIdent = navIdent)) { + navIdent + } else { + null + } + + private fun harSaksbehandlerTilgangTilEnhet( + enhetId: String, + navIdent: NavIdent?, + ): Boolean = + navIdent?.let { + integrasjonClient + .hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent = navIdent) + .any { it.enhetsnummer == enhetId } + } ?: false + + private fun håndterMidlertidigEnhet4863( + navIdent: NavIdent?, + ): Arbeidsfordelingsenhet { + if (navIdent == null) { + throw Feil("Kan ikke håndtere ${BarnetrygdEnhet.MIDLERTIDIG_ENHET} om man mangler NAV-ident") + } + val enheterNavIdentHarTilgangTil = + integrasjonClient + .hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent = navIdent) + .filter { it.enhetsnummer != BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer } + if (enheterNavIdentHarTilgangTil.isEmpty()) { + throw Feil("Fant ingen passende enhetsnummer for nav-ident $navIdent") + } + // Velger bare det første enhetsnummeret i tilfeller hvor man har flere, avklart med fag + val nyBehandlendeEnhet = enheterNavIdentHarTilgangTil.first() + return Arbeidsfordelingsenhet( + nyBehandlendeEnhet.enhetsnummer, + nyBehandlendeEnhet.enhetsnavn, + ) + } + + private fun håndterVikafossenEnhet2103( + navIdent: NavIdent?, + ): Arbeidsfordelingsenhet { + if (navIdent == null) { + throw Feil("Kan ikke håndtere ${BarnetrygdEnhet.VIKAFOSSEN} om man mangler NAV-ident") + } + return Arbeidsfordelingsenhet( + BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + } + + private fun håndterAndreEnheter( + navIdent: NavIdent?, + arbeidsfordelingsenhet: Arbeidsfordelingsenhet, + ): Arbeidsfordelingsenhet { + if (navIdent == null) { + // navIdent er null ved automatisk journalføring + return Arbeidsfordelingsenhet( + arbeidsfordelingsenhet.enhetId, + arbeidsfordelingsenhet.enhetNavn, + ) + } + val enheterNavIdentHarTilgangTil = + integrasjonClient + .hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent = navIdent) + .filter { it.enhetsnummer != BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer } + if (enheterNavIdentHarTilgangTil.isEmpty()) { + throw Feil("Fant ingen passende enhetsnummer for NAV-ident $navIdent") + } + val harTilgangTilBehandledeEnhet = + enheterNavIdentHarTilgangTil.any { + it.enhetsnummer == arbeidsfordelingsenhet.enhetId + } + if (!harTilgangTilBehandledeEnhet) { + // Velger bare det første enhetsnummeret i tilfeller hvor man har flere, avklart med fag + val nyBehandlendeEnhet = enheterNavIdentHarTilgangTil.first() + return Arbeidsfordelingsenhet( + nyBehandlendeEnhet.enhetsnummer, + nyBehandlendeEnhet.enhetsnavn, + ) + } + return Arbeidsfordelingsenhet( + arbeidsfordelingsenhet.enhetId, + arbeidsfordelingsenhet.enhetNavn, + ) + } +} diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/domene/ArbeidsfordelingP\303\245Behandling.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/domene/ArbeidsfordelingP\303\245Behandling.kt" index 9e894a4f353..c71bf84a09b 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/domene/ArbeidsfordelingP\303\245Behandling.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/domene/ArbeidsfordelingP\303\245Behandling.kt" @@ -8,6 +8,7 @@ import jakarta.persistence.GenerationType import jakarta.persistence.Id import jakarta.persistence.SequenceGenerator import jakarta.persistence.Table +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.domene.Arbeidsfordelingsenhet import no.nav.familie.ba.sak.sikkerhet.RollestyringMotDatabase @EntityListeners(RollestyringMotDatabase::class) @@ -35,3 +36,5 @@ data class ArbeidsfordelingPåBehandling( fun toSecureString(): String = "ArbeidsfordelingPåBehandling(id=$id, behandlendeEnhetId=$behandlendeEnhetId, behandlendeEnhetNavn=$behandlendeEnhetNavn, manueltOverstyrt=$manueltOverstyrt)" } + +fun ArbeidsfordelingPåBehandling.tilArbeidsfordelingsenhet(): Arbeidsfordelingsenhet = Arbeidsfordelingsenhet(enhetId = this.behandlendeEnhetId, enhetNavn = this.behandlendeEnhetNavn) diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/common/DataGenerator.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/common/DataGenerator.kt index 70723b50b85..e14e6ad6e1c 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/common/DataGenerator.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/common/DataGenerator.kt @@ -1247,6 +1247,25 @@ fun lagPerson( id = id, ) +fun lagPersonEnkel( + personType: PersonType, + aktør: Aktør = randomAktør(), +): PersonEnkel = + PersonEnkel( + type = personType, + aktør = aktør, + dødsfallDato = null, + fødselsdato = + if (personType == PersonType.SØKER) { + LocalDate.now().minusYears(34) + } else { + LocalDate + .now() + .minusYears(4) + }, + målform = Målform.NB, + ) + fun lagRestSanityBegrunnelse( apiNavn: String = "", navnISystem: String = "", diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/config/IntegrasjonClientMock.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/config/IntegrasjonClientMock.kt index f328e6ad4fe..08db7acdd93 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/config/IntegrasjonClientMock.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/config/IntegrasjonClientMock.kt @@ -17,6 +17,7 @@ import no.nav.familie.ba.sak.integrasjoner.lagTestJournalpost import no.nav.familie.ba.sak.integrasjoner.lagTestOppgaveDTO import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet import no.nav.familie.kontrakter.felles.dokarkiv.ArkiverDokumentResponse +import no.nav.familie.kontrakter.felles.enhet.Enhet import no.nav.familie.kontrakter.felles.kodeverk.BeskrivelseDto import no.nav.familie.kontrakter.felles.kodeverk.BetydningDto import no.nav.familie.kontrakter.felles.kodeverk.KodeverkDto @@ -180,6 +181,8 @@ class IntegrasjonClientMock { "Testinstitusjon", ) } + + every { mockIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil(any()) } returns BarnetrygdEnhet.entries.map { Enhet(it.enhetsnummer, it.enhetsnavn) } } fun clearMockFamilieIntegrasjonerTilgangskontrollClient(mockFamilieIntegrasjonerTilgangskontrollClient: FamilieIntegrasjonerTilgangskontrollClient) { diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt index 28c53eea6ea..e0c27a482a2 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt @@ -3,6 +3,7 @@ package no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner import io.mockk.every import io.mockk.mockk import no.nav.familie.ba.sak.datagenerator.oppgave.lagEnhet +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet import no.nav.familie.kontrakter.felles.NavIdent import no.nav.familie.kontrakter.felles.Ressurs import no.nav.familie.kontrakter.felles.enhet.Enhet @@ -29,8 +30,8 @@ class IntegrasjonClientTest { // Arrange val navIdent = NavIdent("1") - val enhet1 = lagEnhet("1234") - val enhet2 = lagEnhet("4321") + val enhet1 = lagEnhet(BarnetrygdEnhet.VADSØ.enhetsnummer) + val enhet2 = lagEnhet(BarnetrygdEnhet.OSLO.enhetsnummer) every { mockedRestOperations.exchange>>( @@ -50,7 +51,7 @@ class IntegrasjonClientTest { ) // Act - val enheter = integrasjonClient.hentEnheterSomNavIdentHarTilgangTil(navIdent) + val enheter = integrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent) // Assert assertThat(enheter).hasSize(2) diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingServiceTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingServiceTest.kt deleted file mode 100644 index 81bc61950ca..00000000000 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveArbeidsfordelingServiceTest.kt +++ /dev/null @@ -1,448 +0,0 @@ -package no.nav.familie.ba.sak.integrasjoner.oppgave - -import io.mockk.every -import io.mockk.mockk -import no.nav.familie.ba.sak.common.Feil -import no.nav.familie.ba.sak.datagenerator.oppgave.lagArbeidsfordelingPåBehandling -import no.nav.familie.ba.sak.datagenerator.oppgave.lagEnhet -import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient -import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet -import no.nav.familie.kontrakter.felles.NavIdent -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Nested -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows - -class OppgaveArbeidsfordelingServiceTest { - private val mockedIntegrasjonClient: IntegrasjonClient = mockk() - private val oppgaveArbeidsfordelingService: OppgaveArbeidsfordelingService = OppgaveArbeidsfordelingService(integrasjonClient = mockedIntegrasjonClient) - - @Nested - inner class FinnArbeidsfordelingForOppgaveTest { - @Test - fun `skal kaste feil om arbeidsfordeling returnerer midlertidig enhet 4863 og NAV-ident er null`() { - // Arrange - val behandlingId = 1L - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ) - - // Act & assert - val exception = - assertThrows { - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = null, - ) - } - assertThat(exception.message).isEqualTo("Kan ikke sette ${BarnetrygdEnhet.MIDLERTIDIG_ENHET} om man mangler NAV-ident") - } - - @Test - fun `skal kaste feil om arbeidsfordeling returnerer midlertidig enhet 4863 og NAV-ident ikke har tilgang til noen andre enheter enn 4863 og 2103`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.MIDLERTIDIG_ENHET - val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.VIKAFOSSEN - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, - ), - ) - - // Act & assert - val exception = - assertThrows { - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - } - assertThat(exception.message).isEqualTo("Fant ingen passende enhetsnummer for nav-ident $navIdent") - } - - @Test - fun `skal returnere NAV-ident og første enhetsnummer som NAV-identen har tilgang til når arbeidsfordeling returnerer midlertidig enhet 4863`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.OSLO - val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.DRAMMEN - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ), - lagEnhet( - enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, - ), - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isEqualTo(navIdent) - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnummer) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnavn) - } - - @Test - fun `skal kaste feil hvis arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident er null`() { - // Arrange - val behandlingId = 1L - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ) - - // Act & assert - val exception = - assertThrows { - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = null, - ) - } - assertThat(exception.message).isEqualTo("Kan ikke sette ${BarnetrygdEnhet.VIKAFOSSEN} om man mangler NAV-ident") - } - - @Test - fun `skal returnere Vikafossen 2103 uten NAV-ident om arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident ikke har tilgang til Vikafossen 2103`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.STEINKJER - val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.VADSØ - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, - ), - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isNull() - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn) - } - - @Test - fun `skal returnere Vikafossen 2103 med NAV-ident om arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident har tilgang til Vikafossen 2103`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = "1234", - enhetsnavn = "Fiktiv enhet", - ), - lagEnhet( - enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ), - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isEqualTo(navIdent) - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn) - } - - @Test - fun `skal returnere behandlendeEnhetId uten NAV-ident om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident er null`() { - // Arrange - val behandlingId = 1L - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = "1234", - behandlendeEnhetNavn = "Fiktiv enhet", - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = null, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isNull() - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(arbeidsfordelingPåBehandling.behandlendeEnhetId) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(arbeidsfordelingPåBehandling.behandlendeEnhetNavn) - } - - @Test - fun `skal kaste feil om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident ikke har tilgang til noen enheter`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = "1234", - behandlendeEnhetNavn = "Fiktiv enhet", - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ), - lagEnhet( - enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ), - ) - - // Act & assert - val exception = - assertThrows { - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - } - assertThat(exception.message).isEqualTo("Fant ingen passende enhetsnummer for NAV-ident $navIdent") - } - - @Test - fun `skal returnere NAV-ident og første enhet NAV-ident har tilgang om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident ikke har tilgang arbeidsfordeling enheten`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.OSLO - val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.DRAMMEN - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = BarnetrygdEnhet.STEINKJER.enhetsnummer, - behandlendeEnhetNavn = BarnetrygdEnhet.STEINKJER.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ), - lagEnhet( - enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, - ), - lagEnhet( - enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, - enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, - ), - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isEqualTo(navIdent) - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnummer) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnavn) - } - - @Test - fun `skal returnere NAV-ident og arbeidsfordeling enhetsnummer om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident har tilgang arbeidsfordeling enheten`() { - // Arrange - val behandlingId = 1L - val navIdent = NavIdent("1") - - val arbeidsfordelingEnhet = BarnetrygdEnhet.OSLO - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = behandlingId, - behandlendeEnhetId = arbeidsfordelingEnhet.enhetsnummer, - behandlendeEnhetNavn = arbeidsfordelingEnhet.enhetsnavn, - ) - - every { - mockedIntegrasjonClient.hentEnheterSomNavIdentHarTilgangTil( - navIdent = navIdent, - ) - } returns - listOf( - lagEnhet( - enhetsnummer = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, - ), - lagEnhet( - enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, - enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, - ), - lagEnhet( - enhetsnummer = arbeidsfordelingEnhet.enhetsnummer, - enhetsnavn = arbeidsfordelingEnhet.enhetsnavn, - ), - ) - - // Act - val oppgaveArbeidsfordeling = - oppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave( - arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandling, - navIdent = navIdent, - ) - - // Assert - assertThat(oppgaveArbeidsfordeling.navIdent).isEqualTo(navIdent) - assertThat(oppgaveArbeidsfordeling.enhetsnummer).isEqualTo(arbeidsfordelingEnhet.enhetsnummer) - assertThat(oppgaveArbeidsfordeling.enhetsnavn).isEqualTo(arbeidsfordelingEnhet.enhetsnavn) - } - } - - @Nested - inner class OppgaveArbeidsfordelingTest { - @Test - fun `skal kaste exception om enhetsnummer blir satt til mindre enn 4 siffer`() { - // Act & assert - val exception = - assertThrows { - OppgaveArbeidsfordeling( - null, - "123", - "Enhet 123", - ) - } - assertThat(exception.message).isEqualTo("Enhetsnummer må være 4 siffer") - } - - @Test - fun `skal kaste exception om enhetsnummer blir satt til mer enn 4 siffer`() { - // Act & assert - val exception = - assertThrows { - OppgaveArbeidsfordeling( - null, - "12345", - "Enhet 12345", - ) - } - assertThat(exception.message).isEqualTo("Enhetsnummer må være 4 siffer") - } - } -} diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveServiceTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveServiceTest.kt index 7f89d6c66a0..ba705abc14e 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveServiceTest.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveServiceTest.kt @@ -13,9 +13,10 @@ import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClien import no.nav.familie.ba.sak.integrasjoner.lagTestOppgaveDTO import no.nav.familie.ba.sak.integrasjoner.oppgave.domene.DbOppgave import no.nav.familie.ba.sak.integrasjoner.oppgave.domene.OppgaveRepository -import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandling +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.TilpassArbeidsfordelingService import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandlingRepository import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.hentArbeidsfordelingPåBehandling +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.tilArbeidsfordelingsenhet import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingKategori @@ -57,7 +58,7 @@ class OppgaveServiceTest { private val mockedOppgaveRepository: OppgaveRepository = mockk() private val mockedOpprettTaskService: OpprettTaskService = mockk() private val mockedLoggService: LoggService = mockk() - private val mockedOppgaveArbeidsfordelingService: OppgaveArbeidsfordelingService = mockk() + private val mockedTilpassArbeidsfordelingService: TilpassArbeidsfordelingService = mockk() private val unleashService: UnleashService = mockk() private val oppgaveService: OppgaveService = OppgaveService( @@ -67,7 +68,7 @@ class OppgaveServiceTest { opprettTaskService = mockedOpprettTaskService, loggService = mockedLoggService, behandlingHentOgPersisterService = mockedBehandlingHentOgPersisterService, - oppgaveArbeidsfordelingService = mockedOppgaveArbeidsfordelingService, + tilpassArbeidsfordelingService = mockedTilpassArbeidsfordelingService, arbeidsfordelingPåBehandlingRepository = mockedArbeidsfordelingPåBehandlingRepository, unleashService = unleashService, ) @@ -83,6 +84,9 @@ class OppgaveServiceTest { manueltOverstyrt = true, ) + val arbeidsfordelingsenhet = arbeidsfordelingPåBehandling.tilArbeidsfordelingsenhet() + val navIdent = NavIdent("navIdent") + every { mockedBehandlingHentOgPersisterService.hent(BEHANDLING_ID) } returns lagTestBehandling(aktørId = AKTØR_ID_FAGSAK) every { mockedBehandlingHentOgPersisterService.lagreEllerOppdater(any()) } returns lagTestBehandling() every { mockedOppgaveRepository.save(any()) } returns lagTestOppgave() @@ -93,9 +97,7 @@ class OppgaveServiceTest { val opprettOppgaveRequestSlot = slot() every { mockedIntegrasjonClient.opprettOppgave(capture(opprettOppgaveRequestSlot)) } returns OppgaveResponse(OPPGAVE_ID.toLong()) - every { - mockedOppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave(arbeidsfordelingPåBehandling, null) - } returns OppgaveArbeidsfordeling(null, arbeidsfordelingPåBehandling.behandlendeEnhetId, arbeidsfordelingPåBehandling.behandlendeEnhetNavn) + every { mockedTilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, null) } returns null every { unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false) } returns true @@ -121,68 +123,6 @@ class OppgaveServiceTest { verify(exactly = 0) { mockedArbeidsfordelingPåBehandlingRepository.save(any()) } } - @Test - fun `Opprett oppgave skal lage oppgave med NAV-ident samt enhetsnummer og enhetsnavn som er ulik arbeidsfordelingen da NAV-ident ikke har tilgang til den`() { - // Arrange - val navIdent = NavIdent("1") - val enhetsnummerSomSkalOverstyresTil = "1234" - val enhetsnavnSomSkalOverstyresTil = "Fiktiv Enhet" - - val arbeidsfordelingPåBehandling = - lagArbeidsfordelingPåBehandling( - behandlingId = 1, - behandlendeEnhetId = ENHETSNUMMER, - behandlendeEnhetNavn = "enhet", - manueltOverstyrt = true, - ) - - every { mockedBehandlingHentOgPersisterService.hent(BEHANDLING_ID) } returns lagTestBehandling(aktørId = AKTØR_ID_FAGSAK) - every { mockedBehandlingHentOgPersisterService.lagreEllerOppdater(any()) } returns lagTestBehandling() - every { mockedOppgaveRepository.save(any()) } returns lagTestOppgave() - every { mockedOppgaveRepository.findByOppgavetypeAndBehandlingAndIkkeFerdigstilt(any(), any()) } returns null - every { mockedPersonidentService.hentAktør(any()) } returns Aktør(AKTØR_ID_FAGSAK) - every { mockedArbeidsfordelingPåBehandlingRepository.hentArbeidsfordelingPåBehandling(any()) } returns arbeidsfordelingPåBehandling - - val opprettOppgaveRequestSlot = slot() - every { mockedIntegrasjonClient.opprettOppgave(capture(opprettOppgaveRequestSlot)) } returns OppgaveResponse(OPPGAVE_ID.toLong()) - - every { - mockedOppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave(arbeidsfordelingPåBehandling, navIdent) - } returns OppgaveArbeidsfordeling(navIdent, enhetsnummerSomSkalOverstyresTil, enhetsnavnSomSkalOverstyresTil) - - val arbeidsfordelingPåBehandlingSlot = slot() - every { - mockedArbeidsfordelingPåBehandlingRepository.save(capture(arbeidsfordelingPåBehandlingSlot)) - } returnsArgument 0 - - every { unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false) } returns true - - // Act - oppgaveService.opprettOppgave(BEHANDLING_ID, Oppgavetype.BehandleSak, FRIST_FERDIGSTILLELSE_BEH_SAK, navIdent.ident) - - // Assert - assertThat(opprettOppgaveRequestSlot.captured.enhetsnummer).isEqualTo(enhetsnummerSomSkalOverstyresTil) - assertThat(opprettOppgaveRequestSlot.captured.saksId).isEqualTo(FAGSAK_ID.toString()) - assertThat(opprettOppgaveRequestSlot.captured.ident).isEqualTo( - OppgaveIdentV2( - ident = AKTØR_ID_FAGSAK, - gruppe = IdentGruppe.AKTOERID, - ), - ) - assertThat(opprettOppgaveRequestSlot.captured.behandlingstema).isEqualTo(Behandlingstema.OrdinærBarnetrygd.value) - assertThat(opprettOppgaveRequestSlot.captured.fristFerdigstillelse).isEqualTo(LocalDate.now().plusDays(1)) - assertThat(opprettOppgaveRequestSlot.captured.aktivFra).isEqualTo(LocalDate.now()) - assertThat(opprettOppgaveRequestSlot.captured.tema).isEqualTo(Tema.BAR) - assertThat(opprettOppgaveRequestSlot.captured.beskrivelse).contains("https://barnetrygd.intern.nav.no/fagsak/$FAGSAK_ID") - assertThat(opprettOppgaveRequestSlot.captured.behandlesAvApplikasjon).isEqualTo("familie-ba-sak") - assertThat(opprettOppgaveRequestSlot.captured.tilordnetRessurs).isEqualTo(navIdent.ident) - assertThat(arbeidsfordelingPåBehandlingSlot.captured.id).isEqualTo(arbeidsfordelingPåBehandling.id) - assertThat(arbeidsfordelingPåBehandlingSlot.captured.behandlingId).isEqualTo(arbeidsfordelingPåBehandling.behandlingId) - assertThat(arbeidsfordelingPåBehandlingSlot.captured.behandlendeEnhetId).isEqualTo(enhetsnummerSomSkalOverstyresTil) - assertThat(arbeidsfordelingPåBehandlingSlot.captured.behandlendeEnhetNavn).isEqualTo(enhetsnavnSomSkalOverstyresTil) - assertThat(arbeidsfordelingPåBehandlingSlot.captured.manueltOverstyrt).isFalse() - } - @ParameterizedTest @EnumSource(ManuellOppgaveType::class) fun `Opprett oppgave med manuell oppgavetype skal lage oppgave med behandlesAvApplikasjon satt for småbarnstillegg og åpen behandling, men ikke fødselshendelse`(manuellOppgaveType: ManuellOppgaveType) { @@ -195,6 +135,8 @@ class OppgaveServiceTest { manueltOverstyrt = false, ) + val arbeidsfordelingsenhet = arbeidsfordelingPåBehandling.tilArbeidsfordelingsenhet() + every { mockedBehandlingHentOgPersisterService.hent(BEHANDLING_ID) } returns lagTestBehandling(aktørId = AKTØR_ID_FAGSAK) every { mockedBehandlingHentOgPersisterService.lagreEllerOppdater(any()) } returns lagTestBehandling() every { mockedOppgaveRepository.save(any()) } returns lagTestOppgave() @@ -210,9 +152,7 @@ class OppgaveServiceTest { val opprettOppgaveRequestSlot = slot() every { mockedIntegrasjonClient.opprettOppgave(capture(opprettOppgaveRequestSlot)) } returns OppgaveResponse(OPPGAVE_ID.toLong()) - every { - mockedOppgaveArbeidsfordelingService.finnArbeidsfordelingForOppgave(arbeidsfordelingPåBehandling, null) - } returns OppgaveArbeidsfordeling(null, arbeidsfordelingPåBehandling.behandlendeEnhetId, arbeidsfordelingPåBehandling.behandlendeEnhetNavn) + every { mockedTilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, null) } returns null every { unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false) } returns true diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingServiceTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingServiceTest.kt new file mode 100644 index 00000000000..a6f5691c048 --- /dev/null +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingServiceTest.kt @@ -0,0 +1,109 @@ +package no.nav.familie.ba.sak.kjerne.arbeidsfordeling + +import io.mockk.every +import io.mockk.mockk +import io.mockk.slot +import no.nav.familie.ba.sak.common.lagPersonEnkel +import no.nav.familie.ba.sak.config.FeatureToggleConfig +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.domene.Arbeidsfordelingsenhet +import no.nav.familie.ba.sak.integrasjoner.oppgave.OppgaveService +import no.nav.familie.ba.sak.integrasjoner.pdl.PersonopplysningerService +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandling +import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandlingRepository +import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType +import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlagRepository +import no.nav.familie.ba.sak.kjerne.logg.LoggService +import no.nav.familie.ba.sak.kjerne.personident.PersonidentService +import no.nav.familie.ba.sak.kjerne.simulering.lagBehandling +import no.nav.familie.ba.sak.sikkerhet.SikkerhetContext +import no.nav.familie.ba.sak.statistikk.saksstatistikk.SaksstatistikkEventPublisher +import no.nav.familie.kontrakter.felles.NavIdent +import no.nav.familie.unleash.UnleashService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class ArbeidsfordelingServiceTest { + private val arbeidsfordelingPåBehandlingRepository: ArbeidsfordelingPåBehandlingRepository = mockk() + private val personopplysningGrunnlagRepository: PersonopplysningGrunnlagRepository = mockk() + private val personidentService: PersonidentService = mockk() + private val oppgaveService: OppgaveService = mockk() + private val loggService: LoggService = mockk() + private val integrasjonClient: IntegrasjonClient = mockk() + private val personopplysningerService: PersonopplysningerService = mockk() + private val saksstatistikkEventPublisher: SaksstatistikkEventPublisher = mockk() + private val tilpassArbeidsfordelingService: TilpassArbeidsfordelingService = mockk() + private val unleashService: UnleashService = mockk() + + private val arbeidsfordelingService: ArbeidsfordelingService = + ArbeidsfordelingService( + arbeidsfordelingPåBehandlingRepository = arbeidsfordelingPåBehandlingRepository, + personopplysningGrunnlagRepository = personopplysningGrunnlagRepository, + personidentService = personidentService, + oppgaveService = oppgaveService, + loggService = loggService, + integrasjonClient = integrasjonClient, + personopplysningerService = personopplysningerService, + saksstatistikkEventPublisher = saksstatistikkEventPublisher, + tilpassArbeidsfordelingService = tilpassArbeidsfordelingService, + unleashService = unleashService, + ) + + @Nested + inner class FastsettBehandlendeEnhet { + @Test + fun `skal overstyre behandlende enhet fra NORG dersom enhet fra finnArbeidsfordelingForOppgave er en annen`() { + // Arrange + val behandling = lagBehandling() + val søker = lagPersonEnkel(PersonType.SØKER, behandling.fagsak.aktør) + val barn = lagPersonEnkel(PersonType.BARN) + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, + enhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, + ) + + every { + arbeidsfordelingPåBehandlingRepository.finnArbeidsfordelingPåBehandling(behandling.id) + } returns null + + every { + unleashService.isEnabled(FeatureToggleConfig.OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER, false) + } returns true + + every { personopplysningerService.hentPersoninfoEnkel(any()).adressebeskyttelseGradering } returns null + + every { + personopplysningGrunnlagRepository + .finnSøkerOgBarnAktørerTilAktiv(behandling.id) + } returns listOf(søker, barn) + + every { integrasjonClient.hentBehandlendeEnhet(søker.aktør.aktivFødselsnummer()) } returns + listOf( + arbeidsfordelingsenhet, + ) + + every { + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = NavIdent(SikkerhetContext.hentSaksbehandler()), + ) + } returns Arbeidsfordelingsenhet(enhetId = BarnetrygdEnhet.OSLO.enhetsnummer, enhetNavn = BarnetrygdEnhet.OSLO.enhetsnavn) + + val arbeidsfordelingPåBehandlingSlot = slot() + + every { + arbeidsfordelingPåBehandlingRepository.save(capture(arbeidsfordelingPåBehandlingSlot)) + } returnsArgument 0 + + // Act + arbeidsfordelingService.fastsettBehandlendeEnhet(behandling, null) + + // Assert + val arbeidsfordelingPåBehandling = arbeidsfordelingPåBehandlingSlot.captured + assertThat(arbeidsfordelingPåBehandling.behandlendeEnhetId).isEqualTo(BarnetrygdEnhet.OSLO.enhetsnummer) + assertThat(arbeidsfordelingPåBehandling.behandlendeEnhetNavn).isEqualTo(BarnetrygdEnhet.OSLO.enhetsnavn) + } + } +} diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingServiceTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingServiceTest.kt new file mode 100644 index 00000000000..769d8100e7e --- /dev/null +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/TilpassArbeidsfordelingServiceTest.kt @@ -0,0 +1,447 @@ +package no.nav.familie.ba.sak.kjerne.arbeidsfordeling + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.ba.sak.common.Feil +import no.nav.familie.ba.sak.datagenerator.oppgave.lagEnhet +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.domene.Arbeidsfordelingsenhet +import no.nav.familie.kontrakter.felles.NavIdent +import no.nav.familie.kontrakter.felles.enhet.Enhet +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows + +class TilpassArbeidsfordelingServiceTest { + private val mockedIntegrasjonClient: IntegrasjonClient = mockk() + private val tilpassArbeidsfordelingService: TilpassArbeidsfordelingService = + TilpassArbeidsfordelingService(integrasjonClient = mockedIntegrasjonClient) + + @Nested + inner class TilpassArbeidsfordelingTilSaksbehandler { + @Test + fun `skal kaste feil om arbeidsfordeling returnerer midlertidig enhet 4863 og NAV-ident er null`() { + // Arrange + + val arbeidsfordelingPåBehandling = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, + enhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, + ) + + // Act & assert + val exception = + assertThrows { + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingPåBehandling, + navIdent = null, + ) + } + assertThat(exception.message).isEqualTo("Kan ikke håndtere ${BarnetrygdEnhet.MIDLERTIDIG_ENHET} om man mangler NAV-ident") + } + + @Test + fun `skal kaste feil om arbeidsfordeling returnerer midlertidig enhet 4863 og NAV-ident ikke har tilgang til noen andre enheter enn 4863 og 2103`() { + // Arrange + val navIdent = NavIdent("1") + + val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.VIKAFOSSEN + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, + enhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, + ), + ) + + // Act & assert + val exception = + assertThrows { + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + } + assertThat(exception.message).isEqualTo("Fant ingen passende enhetsnummer for nav-ident $navIdent") + } + + @Test + fun `skal returnere NAV-ident og første enhetsnummer som NAV-identen har tilgang til når arbeidsfordeling returnerer midlertidig enhet 4863`() { + // Arrange + val navIdent = NavIdent("1") + + val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.OSLO + val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.DRAMMEN + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, + enhetNavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, + ), + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, + ), + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnummer) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnavn) + } + + @Test + fun `skal kaste feil hvis arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident er null`() { + // Arrange + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + + // Act & assert + val exception = + assertThrows { + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = null, + ) + } + assertThat(exception.message).isEqualTo("Kan ikke håndtere ${BarnetrygdEnhet.VIKAFOSSEN} om man mangler NAV-ident") + } + + @Test + fun `skal returnere Vikafossen 2103 uten NAV-ident om arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident ikke har tilgang til Vikafossen 2103`() { + // Arrange + val navIdent = NavIdent("1") + + val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.STEINKJER + val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.VADSØ + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, + ), + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, + ), + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn) + } + + @Test + fun `skal returnere Vikafossen 2103 med NAV-ident om arbeidsfordeling returnerer Vikafossen 2103 og NAV-ident har tilgang til Vikafossen 2103`() { + // Arrange + val navIdent = NavIdent("1") + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = "1234", + enhetsnavn = "Fiktiv enhet", + ), + lagEnhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn) + } + + @Test + fun `skal returnere behandlendeEnhetId uten NAV-ident om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident er null`() { + // Arrange + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = "1234", + enhetNavn = "Fiktiv enhet", + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = null, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(arbeidsfordelingsenhet.enhetId) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(arbeidsfordelingsenhet.enhetNavn) + } + + @Test + fun `skal kaste feil om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident ikke har tilgang til noen enheter`() { + // Arrange + val navIdent = NavIdent("1") + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = "1234", + enhetNavn = "Fiktiv enhet", + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + ) + + // Act & assert + val exception = + assertThrows { + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + } + assertThat(exception.message).isEqualTo("Fant ingen passende enhetsnummer for NAV-ident $navIdent") + } + + @Test + fun `skal returnere NAV-ident og første enhet NAV-ident har tilgang om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident ikke har tilgang arbeidsfordeling enheten`() { + // Arrange + val navIdent = NavIdent("1") + + val enhetNavIdentHarTilgangTil1 = BarnetrygdEnhet.OSLO + val enhetNavIdentHarTilgangTil2 = BarnetrygdEnhet.DRAMMEN + + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.STEINKJER.enhetsnummer, + enhetNavn = BarnetrygdEnhet.STEINKJER.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil1.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil1.enhetsnavn, + ), + lagEnhet( + enhetsnummer = enhetNavIdentHarTilgangTil2.enhetsnummer, + enhetsnavn = enhetNavIdentHarTilgangTil2.enhetsnavn, + ), + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingsenhet, + navIdent = navIdent, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnummer) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(enhetNavIdentHarTilgangTil1.enhetsnavn) + } + + @Test + fun `skal returnere NAV-ident og arbeidsfordeling enhetsnummer om arbeidsfordeling ikke returnere 2103 eller 4863 og NAV-ident har tilgang arbeidsfordeling enheten`() { + // Arrange + val navIdent = NavIdent("1") + + val arbeidsfordelingEnhet = BarnetrygdEnhet.OSLO + + val arbeidsfordelingPåBehandling = + Arbeidsfordelingsenhet( + enhetId = arbeidsfordelingEnhet.enhetsnummer, + enhetNavn = arbeidsfordelingEnhet.enhetsnavn, + ) + + every { + mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil( + navIdent = navIdent, + ) + } returns + listOf( + lagEnhet( + enhetsnummer = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.MIDLERTIDIG_ENHET.enhetsnavn, + ), + lagEnhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + lagEnhet( + enhetsnummer = arbeidsfordelingEnhet.enhetsnummer, + enhetsnavn = arbeidsfordelingEnhet.enhetsnavn, + ), + ) + + // Act + val tilpassetArbeidsfordelingsenhet = + tilpassArbeidsfordelingService.tilpassArbeidsfordelingsenhetTilSaksbehandler( + arbeidsfordelingsenhet = arbeidsfordelingPåBehandling, + navIdent = navIdent, + ) + + // Assert + assertThat(tilpassetArbeidsfordelingsenhet.enhetId).isEqualTo(arbeidsfordelingEnhet.enhetsnummer) + assertThat(tilpassetArbeidsfordelingsenhet.enhetNavn).isEqualTo(arbeidsfordelingEnhet.enhetsnavn) + } + } + + @Nested + inner class BestemTilordnetRessursPåOppgave { + @Test + fun `skal returnere navIdent dersom navIdent har tilgang til arbeidsfordelingsenhet`() { + // Arrange + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + val navIdent = NavIdent("1") + + every { mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent = navIdent) } returns + listOf( + Enhet( + enhetsnummer = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ), + ) + + // Act + val tilordnetRessurs = + tilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, navIdent) + + // Assert + assertThat(tilordnetRessurs).isEqualTo(navIdent) + } + + @Test + fun `skal returnere null dersom navIdent ikke har tilgang til arbeidsfordelingsenhet`() { + // Arrange + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + val navIdent = NavIdent("1") + + every { mockedIntegrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent = navIdent) } returns + listOf( + Enhet( + enhetsnummer = BarnetrygdEnhet.OSLO.enhetsnummer, + enhetsnavn = BarnetrygdEnhet.OSLO.enhetsnavn, + ), + ) + + // Act + val tilordnetRessurs = + tilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, navIdent) + + // Assert + assertThat(tilordnetRessurs).isNull() + } + + @Test + fun `skal returnere null dersom navIdent er null`() { + // Arrange + val arbeidsfordelingsenhet = + Arbeidsfordelingsenhet( + enhetId = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer, + enhetNavn = BarnetrygdEnhet.VIKAFOSSEN.enhetsnavn, + ) + val navIdent = null + + // Act + val tilordnetRessurs = + tilpassArbeidsfordelingService.bestemTilordnetRessursPåOppgave(arbeidsfordelingsenhet, navIdent) + + // Assert + assertThat(tilordnetRessurs).isNull() + } + } +} diff --git a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingIntegrationTest.kt b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingIntegrationTest.kt index 6f4f9e0d6cb..3c0e94a9ab2 100644 --- a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingIntegrationTest.kt +++ b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/kjerne/arbeidsfordeling/ArbeidsfordelingIntegrationTest.kt @@ -344,9 +344,9 @@ class ArbeidsfordelingIntegrationTest( val søkerAktør = randomAktør() companion object { - const val MANUELT_OVERSTYRT_ENHET = "1234" - const val IKKE_FORTROLIG_ENHET = "4820" - const val FORTROLIG_ENHET = "1122" + val MANUELT_OVERSTYRT_ENHET = BarnetrygdEnhet.OSLO.enhetsnummer + val IKKE_FORTROLIG_ENHET = BarnetrygdEnhet.DRAMMEN.enhetsnummer + val FORTROLIG_ENHET = BarnetrygdEnhet.VIKAFOSSEN.enhetsnummer val SØKER_FNR = randomFnr() val BARN_UTEN_DISKRESJONSKODE = randomFnr() val BARN_MED_DISKRESJONSKODE = randomFnr()