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 5ddbf85be7..76e02efc00 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 d3c74ce4b9..0000000000 --- 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 401e6cb136..d1a18f6ba8 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 0933b267ad..90a75ba036 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 0000000000..7730886410 --- /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 9e894a4f35..c71bf84a09 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 70723b50b8..e14e6ad6e1 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 f328e6ad4f..08db7acdd9 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 28c53eea6e..e0c27a482a 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 81bc61950c..0000000000 --- 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 7f89d6c66a..ba705abc14 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 0000000000..a6f5691c04 --- /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 0000000000..769d8100e7 --- /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 6f4f9e0d6c..3c0e94a9ab 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()