Skip to content

Commit

Permalink
NAV-21852: Forhindrer automatisk journalføring for journalposter tilk…
Browse files Browse the repository at this point in the history
…nyttet strengt fortrolig person(er) (#1163)

* NAV-21852: La til nye services for å utlede logikk for automatisk journalføring

* Flyttet logikk fra kontantstøttetask til egen service for sjekk om automatisk journalføring

* Sammenstiller og grupperer lik logikk i BA og KS sine ruting tasks + automatisk journalføringsservice

* NAV-21852: Endret kode slik at prosjektet kompilerer

* NAV-21852: Fikset testene for EnhetsnummerService

* NAV-21852: Fikset JournalhendelseKontantstøtteRutingTaskTest testene

* NAV-21852: Fikset NavnoHendelseTaskLøypeTest testene

* NAV-21852: Fikset feilende tester

* Opprettet JournalpostBrukerService for å samle duplisert funksjonalitet

* Skrevet de første testene av AdressebeskyttelsegraderingService

* NAV-21852: La til tester for AutomatiskJournalføringBarnetrygdService og Journalpost.erDigitalSøknad

* NAV-21852: Korrigerte assert på feilende test

* NAV-21852: Skrev tester for JournalpostBrukerService

* Har skrevet test for happy case til AutomatiskJournalføringKontantstøtteService

* Skriver tester for AutomatiskJournalføringKontantstøtteService

* NAV-21852: Skrev tester for AdressebeskyttelesesgraderingService og endret rekkefølge på logikken i AutomatiskJournalføringBarnetrygdService

* NAV-21852: La til manglende tester og endret rekkefølgen på logikken i AutomatiskJournalføringKontantstøtteService

* NAV-21852: Kjørte ktlint

* NAV-21852: Fjernet en TODO

* NAV-21852: Omdøpte metode i AdressebeskyttelesesgraderingService

* NAV-21852: Inlinet variabler

* NAV-21852: La til manglende tester

---------

Co-authored-by: Hanne Olsen <hanne.olsen@nav.no>
Co-authored-by: bragejahren <brage.ekroll.jahren@nav.no>
Co-authored-by: ole-kristian-rudjord <olekristianrudjord@gmail.com>
  • Loading branch information
4 people authored Sep 12, 2024
1 parent f85f6dc commit f119468
Show file tree
Hide file tree
Showing 23 changed files with 2,135 additions and 388 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig
import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService
import no.nav.familie.baks.mottak.util.erDnummer
import no.nav.familie.baks.mottak.util.erOrgnr
import no.nav.familie.baks.mottak.util.fristFerdigstillelse
Expand All @@ -20,8 +21,9 @@ abstract class AbstractOppgaveMapper(
private val hentEnhetClient: HentEnhetClient,
private val unleashService: UnleashService,
private val enhetsnummerService: EnhetsnummerService,
val pdlClient: PdlClient,
val arbeidsfordelingClient: ArbeidsfordelingClient,
private val pdlClient: PdlClient,
private val arbeidsfordelingClient: ArbeidsfordelingClient,
private val journalpostBrukerService: JournalpostBrukerService,
) : IOppgaveMapper {
override fun tilOpprettOppgaveRequest(
oppgavetype: Oppgavetype,
Expand Down Expand Up @@ -131,7 +133,7 @@ abstract class AbstractOppgaveMapper(

private fun hentBehandlendeEnhetForPerson(journalpost: Journalpost): String? =
if (journalpost.bruker != null) {
val personIdentPåJournalpost = tilPersonIdent(journalpost.bruker, this.tema)
val personIdentPåJournalpost = journalpostBrukerService.tilPersonIdent(journalpost.bruker, this.tema)
val behandlendeEnhetPåIdent = arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(personIdentPåJournalpost, this.tema)

behandlendeEnhetPåIdent.enhetId
Expand All @@ -140,15 +142,6 @@ abstract class AbstractOppgaveMapper(
null
}

private fun tilPersonIdent(
bruker: Bruker,
tema: Tema,
): String =
when (bruker.type) {
BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema)
else -> bruker.id
}

private fun hentAktørIdFraPdl(
brukerId: String,
tema: Tema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@ class BaSakClient
}
}

fun hentFagsaknummerPåPersonident(personIdent: String): String {
fun hentFagsaknummerPåPersonident(personIdent: String): Long {
val uri = URI.create("$sakServiceUri/fagsaker")
return runCatching {
postForEntity<Ressurs<RestFagsakId>>(uri, mapOf("personIdent" to personIdent))
}.fold(
onSuccess = { it.data?.id?.toString() ?: throw IntegrasjonException(it.melding, null, uri, personIdent) },
onSuccess = { it.data?.id ?: throw IntegrasjonException(it.melding, null, uri, personIdent) },
onFailure = { throw IntegrasjonException("Feil ved henting av saksnummer fra ba-sak.", it, uri, personIdent) },
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService
import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.SøknadRepository
import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.harEøsSteg
import no.nav.familie.kontrakter.felles.Behandlingstema
Expand All @@ -15,8 +16,16 @@ class BarnetrygdOppgaveMapper(
enhetsnummerService: EnhetsnummerService,
arbeidsfordelingClient: ArbeidsfordelingClient,
pdlClient: PdlClient,
journalpostBrukerService: JournalpostBrukerService,
valknadRepository: SøknadRepository,
) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) {
) : AbstractOppgaveMapper(
hentEnhetClient = hentEnhetClient,
unleashService = unleashService,
enhetsnummerService = enhetsnummerService,
pdlClient = pdlClient,
arbeidsfordelingClient = arbeidsfordelingClient,
journalpostBrukerService = journalpostBrukerService,
) {
override val tema: Tema = Tema.BAR

// Behandlingstema og behandlingstype settes basert på regelsettet som er dokumentert nederst her: https://confluence.adeo.no/display/TFA/Mottak+av+dokumenter
Expand Down Expand Up @@ -44,6 +53,7 @@ class BarnetrygdOppgaveMapper(
} else {
Behandlingstype.NASJONAL
}

hoveddokumentErÅrligDifferanseutbetalingAvBarnetrygd(journalpost) -> Behandlingstype.Utland
else -> null
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.journalføring.AdressebeskyttelesesgraderingService
import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService
import no.nav.familie.kontrakter.felles.Tema
import org.slf4j.Logger
import org.slf4j.LoggerFactory
Expand All @@ -9,9 +11,9 @@ import java.util.Locale
@Service
class EnhetsnummerService(
private val hentEnhetClient: HentEnhetClient,
private val pdlClient: PdlClient,
private valknadsidenterService: SøknadsidenterService,
private val arbeidsfordelingClient: ArbeidsfordelingClient,
private val adressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService,
private val journalpostBrukerService: JournalpostBrukerService,
) {
private val logger = LoggerFactory.getLogger(this::class.java)
private val secureLogger: Logger = LoggerFactory.getLogger("secureLogger")
Expand All @@ -30,34 +32,19 @@ class EnhetsnummerService(
throw IllegalStateException("Bruker for journalpost ${journalpost.journalpostId} er null. Usikker på hvordan dette burde håndteres.")
}

val erDigitalSøknad = journalpost.erDigitalKanal() && (journalpost.erKontantstøtteSøknad() || journalpost.erBarnetrygdSøknad())
val tema = Tema.valueOf(journalpost.tema)

val (søkersIdent, barnasIdenter) =
when (tema) {
Tema.BAR -> finnIdenterForBarnetrygd(tema, journalpost.bruker, journalpost.journalpostId, erDigitalSøknad)
Tema.KON -> finnIdenterForKontantstøtte(tema, journalpost.bruker, journalpost.journalpostId, erDigitalSøknad)
Tema.ENF,
Tema.OPP,
-> {
throw IllegalStateException("Støtter ikke tema $tema")
}
}

val alleIdenter = barnasIdenter + søkersIdent

val erEnAvPersoneneStrengtFortrolig =
alleIdenter
.map { pdlClient.hentPerson(it, "hentperson-med-adressebeskyttelse", tema) }
.flatMap { it.adressebeskyttelse }
.any { it.gradering.erStrengtFortrolig() }
adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(
tema = tema,
journalpost = journalpost,
)

return when {
erEnAvPersoneneStrengtFortrolig -> "2103"
journalpost.journalforendeEnhet == "2101" -> "4806" // Enhet 2101 er nedlagt. Rutes til 4806
journalpost.journalforendeEnhet == "4847" -> "4817" // Enhet 4847 skal legges ned. Rutes til 4817
erDigitalSøknad ->
arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(søkersIdent, tema).enhetId
journalpost.erDigitalSøknad() -> arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(journalpostBrukerService.tilPersonIdent(journalpost.bruker, tema), tema).enhetId
journalpost.journalforendeEnhet.isNullOrBlank() -> null
hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).status.uppercase(Locale.getDefault()) == "NEDLAGT" -> null
hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).oppgavebehandler -> journalpost.journalforendeEnhet
Expand All @@ -67,49 +54,4 @@ class EnhetsnummerService(
}
}
}

private fun finnIdenterForKontantstøtte(
tema: Tema,
bruker: Bruker,
journalpostId: String,
erDigitalSøknad: Boolean,
): Pair<String, List<String>> =
if (erDigitalSøknad) {
søknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpostId)
} else {
Pair(
tilPersonIdent(
bruker,
tema,
),
emptyList(),
)
}

private fun finnIdenterForBarnetrygd(
tema: Tema,
bruker: Bruker,
journalpostId: String,
erDigitalSøknad: Boolean,
): Pair<String, List<String>> =
if (erDigitalSøknad) {
søknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpostId)
} else {
Pair(
tilPersonIdent(
bruker,
tema,
),
emptyList(),
)
}

private fun tilPersonIdent(
bruker: Bruker,
tema: Tema,
): String =
when (bruker.type) {
BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema)
else -> bruker.id
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ fun Journalpost.erBarnetrygdSøknad(): Boolean = erBarnetrygdOrdinærSøknad() |

fun Journalpost.erDigitalKanal(): Boolean = kanal == "NAV_NO"

fun Journalpost.erDigitalSøknad(): Boolean = this.erDigitalKanal() && (this.erKontantstøtteSøknad() || this.erBarnetrygdSøknad())

data class Sak(
val arkivsaksnummer: String?,
var arkivsaksystem: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService
import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadRepository
import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.harEøsSteg
import no.nav.familie.kontrakter.felles.Behandlingstema
Expand All @@ -15,8 +16,16 @@ class KontantstøtteOppgaveMapper(
enhetsnummerService: EnhetsnummerService,
arbeidsfordelingClient: ArbeidsfordelingClient,
pdlClient: PdlClient,
journalpostBrukerService: JournalpostBrukerService,
val kontantstøtteSøknadRepository: KontantstøtteSøknadRepository,
) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) {
) : AbstractOppgaveMapper(
hentEnhetClient = hentEnhetClient,
unleashService = unleashService,
enhetsnummerService = enhetsnummerService,
pdlClient = pdlClient,
arbeidsfordelingClient = arbeidsfordelingClient,
journalpostBrukerService = journalpostBrukerService,
) {
override val tema: Tema = Tema.KON

override fun hentBehandlingstema(journalpost: Journalpost): Behandlingstema? = null
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package no.nav.familie.baks.mottak.journalføring

import no.nav.familie.baks.mottak.integrasjoner.Bruker
import no.nav.familie.baks.mottak.integrasjoner.Journalpost
import no.nav.familie.baks.mottak.integrasjoner.PdlClient
import no.nav.familie.baks.mottak.integrasjoner.SøknadsidenterService
import no.nav.familie.baks.mottak.integrasjoner.erDigitalSøknad
import no.nav.familie.kontrakter.felles.Tema
import org.springframework.stereotype.Service

@Service
class AdressebeskyttelesesgraderingService(
private val pdlClient: PdlClient,
private valknadsidenterService: SøknadsidenterService,
private val journalpostBrukerService: JournalpostBrukerService,
) {
fun finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(
tema: Tema,
journalpost: Journalpost,
): Boolean {
if (journalpost.bruker == null) {
throw IllegalStateException("Bruker på journalpost ${journalpost.journalpostId} kan ikke være null")
}

val (søkersIdent, barnasIdenter) =
when (tema) {
Tema.BAR -> finnIdenterForBarnetrygd(tema, journalpost.bruker, journalpost.journalpostId, journalpost.erDigitalSøknad())
Tema.KON -> finnIdenterForKontantstøtte(tema, journalpost.bruker, journalpost.journalpostId, journalpost.erDigitalSøknad())
Tema.ENF,
Tema.OPP,
-> {
throw IllegalStateException("Støtter ikke tema $tema")
}
}

val alleIdenter = barnasIdenter + søkersIdent

return alleIdenter
.map { pdlClient.hentPerson(it, "hentperson-med-adressebeskyttelse", tema) }
.flatMap { it.adressebeskyttelse }
.any { it.gradering.erStrengtFortrolig() }
}

private fun finnIdenterForKontantstøtte(
tema: Tema,
bruker: Bruker,
journalpostId: String,
erDigitalSøknad: Boolean,
): Pair<String, List<String>> =
if (erDigitalSøknad) {
søknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpostId)
} else {
Pair(
journalpostBrukerService.tilPersonIdent(
bruker,
tema,
),
emptyList(),
)
}

private fun finnIdenterForBarnetrygd(
tema: Tema,
bruker: Bruker,
journalpostId: String,
erDigitalSøknad: Boolean,
): Pair<String, List<String>> =
if (erDigitalSøknad) {
søknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpostId)
} else {
Pair(
journalpostBrukerService.tilPersonIdent(
bruker,
tema,
),
emptyList(),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package no.nav.familie.baks.mottak.journalføring

import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig
import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient
import no.nav.familie.baks.mottak.integrasjoner.BaSakClient
import no.nav.familie.baks.mottak.integrasjoner.Journalpost
import no.nav.familie.baks.mottak.integrasjoner.erBarnetrygdSøknad
import no.nav.familie.baks.mottak.integrasjoner.erDigitalKanal
import no.nav.familie.baks.mottak.integrasjoner.finnesÅpenBehandlingPåFagsak
import no.nav.familie.kontrakter.felles.Tema
import no.nav.familie.unleash.UnleashService
import org.springframework.stereotype.Service

@Service
class AutomatiskJournalføringBarnetrygdService(
private val unleashService: UnleashService,
private val baSakClient: BaSakClient,
private val arbeidsfordelingClient: ArbeidsfordelingClient,
private val adressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService,
private val journalpostBrukerService: JournalpostBrukerService,
) {
private val toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER
private val tema = Tema.BAR
private val enheterSomIkkeSkalHaAutomatiskJournalføring = listOf("4863", "2103")

fun skalAutomatiskJournalføres(
journalpost: Journalpost,
brukerHarSakIInfotrygd: Boolean,
fagsakId: Long,
): Boolean {
if (!unleashService.isEnabled(toggleId = toggleId, defaultValue = false)) {
return false
}

if (!journalpost.erBarnetrygdSøknad()) {
return false
}

if (brukerHarSakIInfotrygd) {
return false
}

if (!journalpost.erDigitalKanal()) {
return false
}

if (adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost)) {
return false
}

val personIdent = journalpostBrukerService.tilPersonIdent(journalpost.bruker!!, tema)
val enhetId = arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(personIdent, tema).enhetId

if (enhetId in enheterSomIkkeSkalHaAutomatiskJournalføring) {
return false
}

val minialFagsak = baSakClient.hentMinimalRestFagsak(fagsakId)

if (minialFagsak.finnesÅpenBehandlingPåFagsak()) {
return false
}

return true
}
}
Loading

0 comments on commit f119468

Please sign in to comment.