Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NAV-22311: Bestemmer arbeidsfordelingsenhet utenfor OpprettOppgave-task #4799

Merged

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
) {
Expand Down Expand Up @@ -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 =
Expand All @@ -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"
Expand All @@ -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
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,26 @@ 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
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
Expand All @@ -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(
Expand Down Expand Up @@ -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()) {
Expand All @@ -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 -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
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.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet.Companion.erGyldigBehandlendeBarnetrygdEnhet
import no.nav.familie.kontrakter.felles.NavIdent
import no.nav.familie.kontrakter.felles.enhet.Enhet
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 {
hentGyldigeBehandlendeBarnetrygdEnheter(navIdent = navIdent)
.any { it.enhetsnummer == enhetId }
} ?: false

private fun hentGyldigeBehandlendeBarnetrygdEnheter(navIdent: NavIdent): List<Enhet> =
integrasjonClient
.hentEnheterSomNavIdentHarTilgangTil(navIdent = navIdent)
.filter { erGyldigBehandlendeBarnetrygdEnhet(it.enhetsnummer) }
bragejahren marked this conversation as resolved.
Show resolved Hide resolved

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 =
hentGyldigeBehandlendeBarnetrygdEnheter(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 =
hentGyldigeBehandlendeBarnetrygdEnheter(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,
)
}
}
Loading