From f1194684c54f1c36372230bd4d48d6d59f86d037 Mon Sep 17 00:00:00 2001 From: Thomas Alm <106926075+thoalm@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:08:13 +0200 Subject: [PATCH] =?UTF-8?q?NAV-21852:=20Forhindrer=20automatisk=20journalf?= =?UTF-8?q?=C3=B8ring=20for=20journalposter=20tilknyttet=20strengt=20fortr?= =?UTF-8?q?olig=20person(er)=20(#1163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 Co-authored-by: bragejahren Co-authored-by: ole-kristian-rudjord --- .../integrasjoner/AbstractOppgaveMapper.kt | 17 +- .../baks/mottak/integrasjoner/BaSakClient.kt | 4 +- .../integrasjoner/BarnetrygdOppgaveMapper.kt | 12 +- .../integrasjoner/EnhetsnummerService.kt | 76 +-- .../baks/mottak/integrasjoner/Journalpost.kt | 2 + .../Kontantst\303\270tteOppgaveMapper.kt" | 11 +- .../AdressebeskyttelesesgraderingService.kt" | 79 +++ ...kJournalf\303\270ringBarnetrygdService.kt" | 66 +++ ...303\270ringKontantst\303\270tteService.kt" | 66 +++ .../JournalpostBrukerService.kt" | 23 + .../JournalhendelseBarnetrygdRutingTask.kt | 55 +- ...hendelseKontantst\303\270tteRutingTask.kt" | 57 +- .../mottak/integrasjoner/BaSakClientTest.kt | 2 +- .../integrasjoner/EnhetsnummerServiceTest.kt | 179 +----- .../mottak/integrasjoner/JournalpostTest.kt | 140 +++++ .../mottak/integrasjoner/OppgaveMapperTest.kt | 4 + ...ressebeskyttelesesgraderingServiceTest.kt" | 327 +++++++++++ ...rnalf\303\270ringBarnetrygdServiceTest.kt" | 544 ++++++++++++++++++ ...270ringKontantst\303\270tteServiceTest.kt" | 523 +++++++++++++++++ .../JournalpostBrukerServiceTest.kt" | 85 +++ ...elseKontantst\303\270tteRutingTaskTest.kt" | 76 ++- .../NavnoHendelseTaskL\303\270ypeTest.kt" | 75 ++- .../task/SkanHendelseTaskL\303\270ypeTest.kt" | 100 +++- 23 files changed, 2135 insertions(+), 388 deletions(-) create mode 100644 "src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingService.kt" create mode 100644 "src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdService.kt" create mode 100644 "src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteService.kt" create mode 100644 "src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerService.kt" create mode 100644 src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/JournalpostTest.kt create mode 100644 "src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingServiceTest.kt" create mode 100644 "src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdServiceTest.kt" create mode 100644 "src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteServiceTest.kt" create mode 100644 "src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerServiceTest.kt" diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt index 4a5e70686..c0ea85b52 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt @@ -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 @@ -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, @@ -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 @@ -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, diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClient.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClient.kt index 857d28d30..141fc4fe7 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClient.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClient.kt @@ -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>(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) }, ) } diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt index 4b1e8758e..04303a43c 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt @@ -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 @@ -15,8 +16,16 @@ class BarnetrygdOppgaveMapper( enhetsnummerService: EnhetsnummerService, arbeidsfordelingClient: ArbeidsfordelingClient, pdlClient: PdlClient, + journalpostBrukerService: JournalpostBrukerService, val søknadRepository: 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 @@ -44,6 +53,7 @@ class BarnetrygdOppgaveMapper( } else { Behandlingstype.NASJONAL } + hoveddokumentErÅrligDifferanseutbetalingAvBarnetrygd(journalpost) -> Behandlingstype.Utland else -> null } diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt index 9ba81b4a0..a209b6498 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt @@ -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 @@ -9,9 +11,9 @@ import java.util.Locale @Service class EnhetsnummerService( private val hentEnhetClient: HentEnhetClient, - private val pdlClient: PdlClient, - private val søknadsidenterService: 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") @@ -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 @@ -67,49 +54,4 @@ class EnhetsnummerService( } } } - - private fun finnIdenterForKontantstøtte( - tema: Tema, - bruker: Bruker, - journalpostId: String, - erDigitalSøknad: Boolean, - ): Pair> = - 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> = - 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 - } } diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Journalpost.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Journalpost.kt index 845260fd9..22ec4b318 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Journalpost.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Journalpost.kt @@ -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?, diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" index 7a260cb2b..14571dde8 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" @@ -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 @@ -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 diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingService.kt" new file mode 100644 index 000000000..87fbc6232 --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingService.kt" @@ -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 val søknadsidenterService: 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> = + 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> = + if (erDigitalSøknad) { + søknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpostId) + } else { + Pair( + journalpostBrukerService.tilPersonIdent( + bruker, + tema, + ), + emptyList(), + ) + } +} diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdService.kt" new file mode 100644 index 000000000..76bef0454 --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdService.kt" @@ -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 + } +} diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteService.kt" new file mode 100644 index 000000000..32dd59c5d --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteService.kt" @@ -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.config.featureToggle.UnleashNextMedContextService +import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient +import no.nav.familie.baks.mottak.integrasjoner.Journalpost +import no.nav.familie.baks.mottak.integrasjoner.KsSakClient +import no.nav.familie.baks.mottak.integrasjoner.erDigitalKanal +import no.nav.familie.baks.mottak.integrasjoner.erKontantstøtteSøknad +import no.nav.familie.baks.mottak.integrasjoner.finnesÅpenBehandlingPåFagsak +import no.nav.familie.kontrakter.felles.Tema +import org.springframework.stereotype.Service + +@Service +class AutomatiskJournalføringKontantstøtteService( + private val unleashService: UnleashNextMedContextService, + private val arbeidsfordelingClient: ArbeidsfordelingClient, + private val ksSakClient: KsSakClient, + private val adressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService, + private val journalpostBrukerService: JournalpostBrukerService, +) { + private val toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER + private val tema = Tema.KON + private val enheterSomIkkeSkalHaAutomatiskJournalføring = listOf("4863") + + fun skalAutomatiskJournalføres( + journalpost: Journalpost, + brukerHarSakIInfotrygd: Boolean, + fagsakId: Long, + ): Boolean { + if (!unleashService.isEnabled(toggleId = toggleId, defaultValue = false)) { + return false + } + + if (!journalpost.erKontantstøtteSø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 = ksSakClient.hentMinimalRestFagsak(fagsakId) + + if (minialFagsak.finnesÅpenBehandlingPåFagsak()) { + return false + } + + return true + } +} diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerService.kt" new file mode 100644 index 000000000..123a211a8 --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerService.kt" @@ -0,0 +1,23 @@ +package no.nav.familie.baks.mottak.journalføring + +import no.nav.familie.baks.mottak.integrasjoner.Bruker +import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType +import no.nav.familie.baks.mottak.integrasjoner.PdlClient +import no.nav.familie.kontrakter.felles.Tema +import org.springframework.stereotype.Service + +@Service +class JournalpostBrukerService( + private val pdlClient: PdlClient, +) { + fun tilPersonIdent( + bruker: Bruker, + tema: Tema, + ): String = + when (bruker.type) { + BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema) + BrukerIdType.FNR, + BrukerIdType.ORGNR, + -> bruker.id + } +} diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseBarnetrygdRutingTask.kt b/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseBarnetrygdRutingTask.kt index e7ff64e16..b3260c853 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseBarnetrygdRutingTask.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseBarnetrygdRutingTask.kt @@ -2,13 +2,9 @@ package no.nav.familie.baks.mottak.task import io.micrometer.core.instrument.Counter import io.micrometer.core.instrument.Metrics -import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig.Companion.HOPP_OVER_INFOTRYGD_SJEKK import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService -import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient import no.nav.familie.baks.mottak.integrasjoner.BaSakClient -import no.nav.familie.baks.mottak.integrasjoner.Bruker -import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType import no.nav.familie.baks.mottak.integrasjoner.FagsakDeltagerRolle.BARN import no.nav.familie.baks.mottak.integrasjoner.FagsakDeltagerRolle.FORELDER import no.nav.familie.baks.mottak.integrasjoner.FagsakStatus.AVSLUTTET @@ -23,9 +19,8 @@ import no.nav.familie.baks.mottak.integrasjoner.PdlClient import no.nav.familie.baks.mottak.integrasjoner.RestFagsak import no.nav.familie.baks.mottak.integrasjoner.RestFagsakDeltager import no.nav.familie.baks.mottak.integrasjoner.StatusKode -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.baks.mottak.journalføring.AutomatiskJournalføringBarnetrygdService +import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService import no.nav.familie.kontrakter.ba.infotrygd.InfotrygdSøkResponse import no.nav.familie.kontrakter.felles.Tema import no.nav.familie.kontrakter.felles.personopplysning.FORELDERBARNRELASJONROLLE @@ -50,46 +45,33 @@ class JournalhendelseBarnetrygdRutingTask( private val baSakClient: BaSakClient, private val infotrygdBarnetrygdClient: InfotrygdBarnetrygdClient, private val taskService: TaskService, - private val unleashService: UnleashNextMedContextService, private val journalpostClient: JournalpostClient, - private val arbeidsfordelingClient: ArbeidsfordelingClient, private val unleashNextMedContextService: UnleashNextMedContextService, + private val automatiskJournalføringBarnetrygdService: AutomatiskJournalføringBarnetrygdService, + private val journalpostBrukerService: JournalpostBrukerService, ) : AsyncTaskStep { private val tema = Tema.BAR + private val sakssystemMarkeringCounter = mutableMapOf() - val log: Logger = LoggerFactory.getLogger(JournalhendelseBarnetrygdRutingTask::class.java) - val sakssystemMarkeringCounter = mutableMapOf() - val enheterSomIkkeSkalHaAutomatiskJournalføring = listOf("4863") + private val log: Logger = LoggerFactory.getLogger(JournalhendelseBarnetrygdRutingTask::class.java) override fun doTask(task: Task) { - val brukersIdent = task.metadata["personIdent"] as String? val journalpost = journalpostClient.hentJournalpost(task.metadata["journalpostId"] as String) - - val erBarnetrygdSøknad = journalpost.erBarnetrygdSøknad() + val brukersIdent = task.metadata["personIdent"] as String? + val personIdent by lazy { journalpostBrukerService.tilPersonIdent(journalpost.bruker!!, tema) } + val fagsakId = baSakClient.hentFagsaknummerPåPersonident(personIdent) val (baSak, infotrygdSak) = brukersIdent?.run { søkEtterSakIBaSakOgInfotrygd(this) } ?: Pair(null, null) - val brukerHarFagsakIBaSak = baSak.finnes() val brukerHarSakIInfotrygd = infotrygdSak.finnes() - val featureToggleForAutomatiskJournalføringSkruddPå = - unleashService.isEnabled( - toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, - defaultValue = false, - ) - - val personIdent by lazy { tilPersonIdent(journalpost.bruker!!, tema) } - val fagsakId by lazy { baSakClient.hentFagsaknummerPåPersonident(personIdent) } - val harÅpenBehandlingIFagsak by lazy { baSakClient.hentMinimalRestFagsak(fagsakId.toLong()).finnesÅpenBehandlingPåFagsak() } - val sakssystemMarkering = hentSakssystemMarkering(brukerHarFagsakIBaSak, brukerHarSakIInfotrygd, baSak, infotrygdSak) val skalAutomatiskJournalføreJournalpost = - featureToggleForAutomatiskJournalføringSkruddPå && - erBarnetrygdSøknad && - !brukerHarSakIInfotrygd && - arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(personIdent, tema).enhetId !in enheterSomIkkeSkalHaAutomatiskJournalføring && - journalpost.erDigitalKanal() && - !harÅpenBehandlingIFagsak + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + brukerHarSakIInfotrygd, + fagsakId, + ) if (skalAutomatiskJournalføreJournalpost) { log.info("Oppretter OppdaterOgFerdigstillJournalpostTask for journalpost med id ${journalpost.journalpostId}") @@ -192,15 +174,6 @@ class JournalhendelseBarnetrygdRutingTask( fun Sakspart?.finnes(): Boolean = this != null - private fun tilPersonIdent( - bruker: Bruker, - tema: Tema, - ): String = - when (bruker.type) { - BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema) - else -> bruker.id - } - companion object { const val TASK_STEP_TYPE = "journalhendelseBarnetrygdRuting" } diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTask.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTask.kt" index f0782d950..720908ebf 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTask.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTask.kt" @@ -2,20 +2,14 @@ package no.nav.familie.baks.mottak.task import io.micrometer.core.instrument.Counter import io.micrometer.core.instrument.Metrics -import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig -import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService -import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient -import no.nav.familie.baks.mottak.integrasjoner.Bruker -import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType import no.nav.familie.baks.mottak.integrasjoner.Identgruppe import no.nav.familie.baks.mottak.integrasjoner.InfotrygdKontantstøtteClient import no.nav.familie.baks.mottak.integrasjoner.JournalpostClient import no.nav.familie.baks.mottak.integrasjoner.KsSakClient import no.nav.familie.baks.mottak.integrasjoner.PdlClient import no.nav.familie.baks.mottak.integrasjoner.StonadDto -import no.nav.familie.baks.mottak.integrasjoner.erDigitalKanal -import no.nav.familie.baks.mottak.integrasjoner.erKontantstøtteSøknad -import no.nav.familie.baks.mottak.integrasjoner.finnesÅpenBehandlingPåFagsak +import no.nav.familie.baks.mottak.journalføring.AutomatiskJournalføringKontantstøtteService +import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService import no.nav.familie.kontrakter.felles.Tema import no.nav.familie.kontrakter.felles.personopplysning.FORELDERBARNRELASJONROLLE import no.nav.familie.prosessering.AsyncTaskStep @@ -34,42 +28,32 @@ import java.time.YearMonth ) class JournalhendelseKontantstøtteRutingTask( private val pdlClient: PdlClient, + private val ksSakClient: KsSakClient, private val infotrygdKontantstøtteClient: InfotrygdKontantstøtteClient, private val taskService: TaskService, private val journalpostClient: JournalpostClient, - private val ksSakClient: KsSakClient, - private val unleashService: UnleashNextMedContextService, - private val arbeidsfordelingClient: ArbeidsfordelingClient, + private val automatiskJournalføringKontantstøtteService: AutomatiskJournalføringKontantstøtteService, + private val journalpostBrukerService: JournalpostBrukerService, ) : AsyncTaskStep { - val log: Logger = LoggerFactory.getLogger(JournalhendelseKontantstøtteRutingTask::class.java) - val enheterSomIkkeSkalHaAutomatiskJournalføring = listOf("4863") - val sakssystemMarkeringCounter = mutableMapOf() - val tema = Tema.KON + private val tema = Tema.KON + private val sakssystemMarkeringCounter = mutableMapOf() + + private val log: Logger = LoggerFactory.getLogger(JournalhendelseKontantstøtteRutingTask::class.java) override fun doTask(task: Task) { val journalpost = journalpostClient.hentJournalpost(task.metadata["journalpostId"] as String) - val brukersIdent = tilPersonIdent(journalpost.bruker!!, tema) + val brukersIdent = journalpostBrukerService.tilPersonIdent(journalpost.bruker!!, tema) + val fagsakId = ksSakClient.hentFagsaknummerPåPersonident(brukersIdent) - val fagsakId by lazy { ksSakClient.hentFagsaknummerPåPersonident(brukersIdent) } - - val harÅpenBehandlingIFagsak by lazy { ksSakClient.hentMinimalRestFagsak(fagsakId).finnesÅpenBehandlingPåFagsak() } val harLøpendeSakIInfotrygd = harLøpendeSakIInfotrygd(brukersIdent) - val erKontantstøtteSøknad = journalpost.erKontantstøtteSøknad() - val featureToggleForAutomatiskJournalføringSkruddPå = - unleashService.isEnabled( - toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, - defaultValue = false, - ) - val sakssystemMarkering = hentSakssystemMarkering(harLøpendeSakIInfotrygd) val skalAutomatiskJournalføreJournalpost = - featureToggleForAutomatiskJournalføringSkruddPå && - erKontantstøtteSøknad && - !harLøpendeSakIInfotrygd && - journalpost.erDigitalKanal() && - arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(brukersIdent, tema).enhetId !in enheterSomIkkeSkalHaAutomatiskJournalføring && - !harÅpenBehandlingIFagsak + automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres( + journalpost, + harLøpendeSakIInfotrygd, + fagsakId, + ) if (skalAutomatiskJournalføreJournalpost) { log.info("Oppretter OppdaterOgFerdigstillJournalpostTask for journalpost med id ${journalpost.journalpostId}") @@ -144,15 +128,6 @@ class JournalhendelseKontantstøtteRutingTask( } } - private fun tilPersonIdent( - bruker: Bruker, - tema: Tema, - ): String = - when (bruker.type) { - BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema) - else -> bruker.id - } - companion object { const val TASK_STEP_TYPE = "journalhendelseKontantstøtteRuting" } diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClientTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClientTest.kt index 7d2bbed46..c259676bd 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClientTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/BaSakClientTest.kt @@ -40,7 +40,7 @@ class BaSakClientTest { ) val response = baSakClient.hentFagsaknummerPåPersonident(personIdent) - assertThat(response).isEqualTo(fagsakId.toString()) + assertThat(response).isEqualTo(fagsakId) } @Test diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerServiceTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerServiceTest.kt index 6b23045e9..b681b4716 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerServiceTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerServiceTest.kt @@ -2,6 +2,8 @@ package no.nav.familie.baks.mottak.integrasjoner import io.mockk.every import io.mockk.mockk +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.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test @@ -11,15 +13,15 @@ import org.junit.jupiter.params.provider.EnumSource class EnhetsnummerServiceTest { private val mockedHentEnhetClient: HentEnhetClient = mockk() - private val mockedPdlClient: PdlClient = mockk() - private val mockedSøknadsidenterService: SøknadsidenterService = mockk() private val mockedArbeidsfordelingClient: ArbeidsfordelingClient = mockk() + private val mockedAdressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService = mockk() + private val mockedJournalpostBrukerService: JournalpostBrukerService = mockk() private val enhetsnummerService: EnhetsnummerService = EnhetsnummerService( hentEnhetClient = mockedHentEnhetClient, - pdlClient = mockedPdlClient, - søknadsidenterService = mockedSøknadsidenterService, arbeidsfordelingClient = mockedArbeidsfordelingClient, + adressebeskyttelesesgraderingService = mockedAdressebeskyttelesesgraderingService, + journalpostBrukerService = mockedJournalpostBrukerService, ) private val digitalKanal = "NAV_NO" @@ -48,16 +50,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false // Act val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) @@ -90,16 +84,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false // Act val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) @@ -131,16 +117,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false // Act val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) @@ -172,16 +150,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false every { mockedHentEnhetClient.hentEnhet("1234") @@ -217,16 +187,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false every { mockedHentEnhetClient.hentEnhet("1234") @@ -262,16 +224,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, emptyList()) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false every { mockedHentEnhetClient.hentEnhet("1234") @@ -308,24 +262,8 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, listOf("123", "456")) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, listOf("123", "456")) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) - - every { - mockedPdlClient.hentPerson("123", graphqlfil = "hentperson-med-adressebeskyttelse", tema = tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.STRENGT_FORTROLIG))) - - every { - mockedPdlClient.hentPerson("456", graphqlfil = "hentperson-med-adressebeskyttelse", tema = tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns true // Act val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) @@ -383,71 +321,6 @@ class EnhetsnummerServiceTest { assertThat(exception.message).isEqualTo("Bruker for journalpost $journalpostId er null. Usikker på hvordan dette burde håndteres.") } - @ParameterizedTest - @EnumSource( - value = Tema::class, - names = ["BAR", "KON"], - mode = EnumSource.Mode.EXCLUDE, - ) - fun `skal kaste feil når tema ikke er støttet`( - tema: Tema, - ) { - // Arrange - val journalpost = - Journalpost( - journalpostId = "123", - journalposttype = Journalposttype.I, - journalstatus = Journalstatus.MOTTATT, - tema = tema.name, - journalforendeEnhet = "1", - kanal = digitalKanal, - dokumenter = hentDokumenterMedRiktigBrevkode(tema), - bruker = Bruker("312", BrukerIdType.FNR), - ) - - // Act & Assert - val exception = - assertThrows { - enhetsnummerService.hentEnhetsnummer(journalpost) - } - - assertThat(exception.message).isEqualTo("Støtter ikke tema $tema") - } - - @ParameterizedTest - @EnumSource( - value = Tema::class, - names = ["BAR", "KON"], - ) - fun `skal sette enhet 2103 Vikafossen for papirsøkand hvor søker er strengt fortrolig`( - tema: Tema, - ) { - // Arrange - val fnr = "321" - - val journalpost = - Journalpost( - journalpostId = "123", - journalposttype = Journalposttype.I, - journalstatus = Journalstatus.MOTTATT, - tema = tema.name, - journalforendeEnhet = "2101", - bruker = Bruker(fnr, BrukerIdType.FNR), - kanal = "SKAN_NETS", - dokumenter = hentDokumenterMedRiktigBrevkode(tema), - ) - - every { - mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.STRENGT_FORTROLIG))) - - // Act - val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) - - // Assert - assertThat(enhetsnummer).isEqualTo("2103") - } - @ParameterizedTest @EnumSource( value = Tema::class, @@ -472,16 +345,12 @@ class EnhetsnummerServiceTest { ) every { - mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, listOf("123", "456")) - - every { - mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) - } returns Pair(fnr, listOf("123", "456")) + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost(tema, journalpost) + } returns false every { - mockedPdlClient.hentPerson(any(), any(), any()) - } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + mockedJournalpostBrukerService.tilPersonIdent(journalpost.bruker!!, tema) + } returns "123456789" every { mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent(any(), any()) diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/JournalpostTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/JournalpostTest.kt new file mode 100644 index 000000000..c9bfb6b2e --- /dev/null +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/JournalpostTest.kt @@ -0,0 +1,140 @@ +package no.nav.familie.baks.mottak.integrasjoner + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class JournalpostTest { + @Nested + inner class ErDigitalSøknadTest { + @Test + fun `skal returnere false hvis brevkode ikke er riktig`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "feil brevkode", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + // Act + val erDigitalSøknad = journalpost.erDigitalSøknad() + + // Assert + assertThat(erDigitalSøknad).isFalse() + } + + @Test + fun `skal returnere false hvis kanal ikke er NAV_NO`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "IKKE_NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + // Act + val erDigitalSøknad = journalpost.erDigitalSøknad() + + // Assert + assertThat(erDigitalSøknad).isFalse() + } + + @Test + fun `skal returnere true hvis digital kontatstøtte søknad`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + // Act + val erDigitalSøknad = journalpost.erDigitalSøknad() + + // Assert + assertThat(erDigitalSøknad).isTrue() + } + + @Test + fun `skal returnere true hvis ordinær digital barnetrygd søknad`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + // Act + val erDigitalSøknad = journalpost.erDigitalSøknad() + + // Assert + assertThat(erDigitalSøknad).isTrue() + } + + @Test + fun `skal returnere true hvis utvidet digital barnetrygd søknad`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.09", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + // Act + val erDigitalSøknad = journalpost.erDigitalSøknad() + + // Assert + assertThat(erDigitalSøknad).isTrue() + } + } +} diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt index 1ecaec495..097bef574 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt @@ -4,6 +4,7 @@ import io.mockk.every import io.mockk.mockk import no.nav.familie.baks.mottak.DevLauncher import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig +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.kontantstøtte.domene.KontantstøtteSøknadRepository import no.nav.familie.kontrakter.felles.Behandlingstema @@ -39,6 +40,7 @@ class OppgaveMapperTest( private val mockHentEnhetClient: HentEnhetClient = mockk(relaxed = true) private val mockEnhetsnummerService: EnhetsnummerService = mockk() private val mockArbeidsfordelingClient: ArbeidsfordelingClient = mockk(relaxed = true) + private val mockJournalpostBrukerService: JournalpostBrukerService = mockk() private val barnetrygdOppgaveMapper: IOppgaveMapper = BarnetrygdOppgaveMapper( @@ -48,6 +50,7 @@ class OppgaveMapperTest( pdlClient = mockPdlClient, søknadRepository = barnetrygdSøknadRepository, arbeidsfordelingClient = mockArbeidsfordelingClient, + journalpostBrukerService = mockJournalpostBrukerService, ) private val kontantstøtteOppgaveMapper: IOppgaveMapper = @@ -58,6 +61,7 @@ class OppgaveMapperTest( pdlClient = mockPdlClient, kontantstøtteSøknadRepository = kontantstøtteSøknadRepository, arbeidsfordelingClient = mockArbeidsfordelingClient, + journalpostBrukerService = mockJournalpostBrukerService, ) @BeforeEach diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingServiceTest.kt" new file mode 100644 index 000000000..c67ad70df --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AdressebeskyttelesesgraderingServiceTest.kt" @@ -0,0 +1,327 @@ +package no.nav.familie.baks.mottak.journalføring + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.integrasjoner.Adressebeskyttelse +import no.nav.familie.baks.mottak.integrasjoner.Adressebeskyttelsesgradering +import no.nav.familie.baks.mottak.integrasjoner.Bruker +import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType +import no.nav.familie.baks.mottak.integrasjoner.DokumentInfo +import no.nav.familie.baks.mottak.integrasjoner.Dokumentstatus +import no.nav.familie.baks.mottak.integrasjoner.Journalpost +import no.nav.familie.baks.mottak.integrasjoner.Journalposttype +import no.nav.familie.baks.mottak.integrasjoner.Journalstatus +import no.nav.familie.baks.mottak.integrasjoner.PdlClient +import no.nav.familie.baks.mottak.integrasjoner.PdlPersonData +import no.nav.familie.baks.mottak.integrasjoner.SøknadsidenterService +import no.nav.familie.kontrakter.felles.Tema +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource + +class AdressebeskyttelesesgraderingServiceTest { + private val mockedPdlClient: PdlClient = mockk() + private val mockedSøknadsidenterService: SøknadsidenterService = mockk() + private val mockedJournalpostBrukerService: JournalpostBrukerService = mockk() + + private val adressebeskyttelesesgraderingService = + AdressebeskyttelesesgraderingService( + pdlClient = mockedPdlClient, + søknadsidenterService = mockedSøknadsidenterService, + journalpostBrukerService = mockedJournalpostBrukerService, + ) + + @Test + fun `skal kaste feil når bruker ikke er satt på journalpost`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = null, + ) + + // Act & Assert + val exception = + assertThrows { + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } + assertThat(exception.message).isEqualTo("Bruker på journalpost ${journalpost.journalpostId} kan ikke være null") + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + mode = EnumSource.Mode.EXCLUDE, + ) + fun `skal kaste feil når tema ikke er støttet`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + bruker = Bruker("312", BrukerIdType.FNR), + ) + + // Act & Assert + val exception = + assertThrows { + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = tema, + journalpost = journalpost, + ) + } + assertThat(exception.message).isEqualTo("Støtter ikke tema $tema") + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal returnere true om journalpost fra digital søknad er tilknyttet en strengt fotrolig person`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1", + kanal = "NAV_NO", + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + bruker = Bruker("312", BrukerIdType.FNR), + ) + + every { + mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost( + journalpostId = journalpost.journalpostId, + ) + } returns Pair("123456789", emptyList()) + + every { + mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost( + journalpostId = journalpost.journalpostId, + ) + } returns Pair("123456789", emptyList()) + + every { + mockedPdlClient.hentPerson( + personIdent = "123456789", + graphqlfil = "hentperson-med-adressebeskyttelse", + tema = tema, + ) + } returns + PdlPersonData( + adressebeskyttelse = + listOf( + Adressebeskyttelse( + gradering = Adressebeskyttelsesgradering.STRENGT_FORTROLIG, + ), + ), + ) + + // Act + val finnesAdressebeskyttelsegradringPåJournalpost = + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = tema, + journalpost = journalpost, + ) + + // Assert + assertThat(finnesAdressebeskyttelsegradringPåJournalpost).isTrue() + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal returnere true om journalpost fra papirsøknad er tilknyttet en strengt fotrolig person`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1", + kanal = "IKKE_NAV_NO", + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + bruker = Bruker("312", BrukerIdType.FNR), + ) + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = tema, + ) + } returns "123456789" + + every { + mockedPdlClient.hentPerson( + personIdent = "123456789", + graphqlfil = "hentperson-med-adressebeskyttelse", + tema = tema, + ) + } returns + PdlPersonData( + adressebeskyttelse = + listOf( + Adressebeskyttelse( + gradering = Adressebeskyttelsesgradering.STRENGT_FORTROLIG, + ), + ), + ) + + // Act + val finnesAdressebeskyttelsegradringPåJournalpost = + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = tema, + journalpost = journalpost, + ) + + // Assert + assertThat(finnesAdressebeskyttelsegradringPåJournalpost).isTrue() + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal returnere false om journalpost fra digital søknad ikke er tilknyttet en strengt fotrolig person`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1", + kanal = "NAV_NO", + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + bruker = Bruker("312", BrukerIdType.FNR), + ) + + every { + mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost( + journalpostId = journalpost.journalpostId, + ) + } returns Pair("123456789", emptyList()) + + every { + mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost( + journalpostId = journalpost.journalpostId, + ) + } returns Pair("123456789", emptyList()) + + every { + mockedPdlClient.hentPerson( + personIdent = "123456789", + graphqlfil = "hentperson-med-adressebeskyttelse", + tema = tema, + ) + } returns + PdlPersonData( + adressebeskyttelse = + listOf( + Adressebeskyttelse( + gradering = Adressebeskyttelsesgradering.UGRADERT, + ), + ), + ) + + // Act + val finnesAdressebeskyttelsegradringPåJournalpost = + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = tema, + journalpost = journalpost, + ) + + // Assert + assertThat(finnesAdressebeskyttelsegradringPåJournalpost).isFalse() + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal returnere false om journalpost fra papirsøknad ikke er tilknyttet en strengt fotrolig person`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1", + kanal = "IKKE_NAV_NO", + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + bruker = Bruker("312", BrukerIdType.FNR), + ) + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = tema, + ) + } returns "123456789" + + every { + mockedPdlClient.hentPerson( + personIdent = "123456789", + graphqlfil = "hentperson-med-adressebeskyttelse", + tema = tema, + ) + } returns + PdlPersonData( + adressebeskyttelse = + listOf( + Adressebeskyttelse( + gradering = Adressebeskyttelsesgradering.UGRADERT, + ), + ), + ) + + // Act + val finnesAdressebeskyttelsegradringPåJournalpost = + adressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = tema, + journalpost = journalpost, + ) + + // Assert + assertThat(finnesAdressebeskyttelsegradringPåJournalpost).isFalse() + } + + private fun hentDokumenterMedRiktigBrevkode(tema: Tema): List { + val brevkode = + when (tema) { + Tema.BAR -> "NAV 33-00.07" + Tema.KON -> "NAV 34-00.08" + else -> "" + } + return listOf(DokumentInfo(brevkode = brevkode, tittel = "Søknad", dokumentstatus = Dokumentstatus.FERDIGSTILT, dokumentvarianter = emptyList())) + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdServiceTest.kt" new file mode 100644 index 000000000..04859f3f0 --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringBarnetrygdServiceTest.kt" @@ -0,0 +1,544 @@ +package no.nav.familie.baks.mottak.journalføring + +import io.mockk.every +import io.mockk.mockk +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.BehandlingKategori +import no.nav.familie.baks.mottak.integrasjoner.BehandlingStatus +import no.nav.familie.baks.mottak.integrasjoner.BehandlingType +import no.nav.familie.baks.mottak.integrasjoner.BehandlingUnderkategori +import no.nav.familie.baks.mottak.integrasjoner.Bruker +import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType +import no.nav.familie.baks.mottak.integrasjoner.DokumentInfo +import no.nav.familie.baks.mottak.integrasjoner.Dokumentstatus +import no.nav.familie.baks.mottak.integrasjoner.FagsakStatus +import no.nav.familie.baks.mottak.integrasjoner.Journalpost +import no.nav.familie.baks.mottak.integrasjoner.Journalposttype +import no.nav.familie.baks.mottak.integrasjoner.Journalstatus +import no.nav.familie.baks.mottak.integrasjoner.RestMinimalFagsak +import no.nav.familie.baks.mottak.integrasjoner.RestVisningBehandling +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.kontrakter.felles.arbeidsfordeling.Enhet +import no.nav.familie.unleash.UnleashService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.time.LocalDateTime + +class AutomatiskJournalføringBarnetrygdServiceTest { + private val mockedUnleashService: UnleashService = mockk() + private val mockedBaSakClient: BaSakClient = mockk() + private val mockedArbeidsfordelingClient: ArbeidsfordelingClient = mockk() + private val mockedAdressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService = mockk() + private val mockedJournalpostBrukerService: JournalpostBrukerService = mockk() + private val automatiskJournalføringBarnetrygdService: AutomatiskJournalføringBarnetrygdService = + AutomatiskJournalføringBarnetrygdService( + unleashService = mockedUnleashService, + baSakClient = mockedBaSakClient, + arbeidsfordelingClient = mockedArbeidsfordelingClient, + adressebeskyttelesesgraderingService = mockedAdressebeskyttelesesgraderingService, + journalpostBrukerService = mockedJournalpostBrukerService, + ) + + @Test + fun `skal ikke automatisk journalføre journalpost om toggle er av`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns false + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + fagsakId, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost om journalposten ikke er barnetrygd`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + dokumenter = + listOf( + DokumentInfo( + brevkode = "ikke_barnetrygd", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + 1L, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost om bruker har fagsak i infotrygd`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + true, + 1L, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost om søknaden ikke er digital`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + kanal = "IKKE_NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + 1L, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost hvor enhet på behandlede ident ikke skal bli automatisk journalført`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.BAR, + ) + } returns identifikator + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.BAR, + ) + } returns + Enhet( + enhetId = "4863", + enhetNavn = "enhetNavn", + ) + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + fagsakId, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost om åpen behandling finnes i fagsak`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.BAR, + ) + } returns identifikator + + every { + mockedBaSakClient.hentMinimalRestFagsak( + fagsakId = fagsakId, + ) + } returns + RestMinimalFagsak( + id = fagsakId, + behandlinger = + listOf( + RestVisningBehandling( + behandlingId = 12931230L, + opprettetTidspunkt = LocalDateTime.now(), + kategori = BehandlingKategori.NASJONAL, + aktiv = true, + underkategori = BehandlingUnderkategori.ORDINÆR, + status = BehandlingStatus.UTREDES, + type = BehandlingType.FØRSTEGANGSBEHANDLING, + ), + ), + status = FagsakStatus.LØPENDE, + ) + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.BAR, + ) + } returns + Enhet( + enhetId = "enhetId", + enhetNavn = "enhetNavn", + ) + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + fagsakId, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost om det finnes en tilknyttet person med adressebeskyttelse`() { + // Arrange + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + 1L, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalpost hvis det finnes en tilknyttet strengt fortrolig person`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + fagsakId, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal automatisk journalføre journalpost`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.BAR, + ) + } returns identifikator + + every { + mockedBaSakClient.hentMinimalRestFagsak( + fagsakId = fagsakId, + ) + } returns + RestMinimalFagsak( + id = fagsakId, + behandlinger = listOf(), + status = FagsakStatus.LØPENDE, + ) + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.BAR, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.BAR, + ) + } returns + Enhet( + enhetId = "enhetId", + enhetNavn = "enhetNavn", + ) + + // Act + val skalAutomatiskJournalføres = + automatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres( + journalpost, + false, + fagsakId, + ) + + // Assert + assertThat(skalAutomatiskJournalføres).isTrue() + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteServiceTest.kt" new file mode 100644 index 000000000..6562cff9c --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/AutomatiskJournalf\303\270ringKontantst\303\270tteServiceTest.kt" @@ -0,0 +1,523 @@ +package no.nav.familie.baks.mottak.journalføring + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig +import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService +import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient +import no.nav.familie.baks.mottak.integrasjoner.BehandlingKategori +import no.nav.familie.baks.mottak.integrasjoner.BehandlingStatus +import no.nav.familie.baks.mottak.integrasjoner.BehandlingType +import no.nav.familie.baks.mottak.integrasjoner.BehandlingUnderkategori +import no.nav.familie.baks.mottak.integrasjoner.Bruker +import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType +import no.nav.familie.baks.mottak.integrasjoner.DokumentInfo +import no.nav.familie.baks.mottak.integrasjoner.Dokumentstatus +import no.nav.familie.baks.mottak.integrasjoner.FagsakStatus +import no.nav.familie.baks.mottak.integrasjoner.Journalpost +import no.nav.familie.baks.mottak.integrasjoner.Journalposttype +import no.nav.familie.baks.mottak.integrasjoner.Journalstatus +import no.nav.familie.baks.mottak.integrasjoner.KsSakClient +import no.nav.familie.baks.mottak.integrasjoner.RestMinimalFagsak +import no.nav.familie.baks.mottak.integrasjoner.RestVisningBehandling +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.kontrakter.felles.arbeidsfordeling.Enhet +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.time.LocalDateTime + +class AutomatiskJournalføringKontantstøtteServiceTest { + private val mockedUnleashService: UnleashNextMedContextService = mockk() + private val mockedArbeidsfordelingClient: ArbeidsfordelingClient = mockk() + private val mockedKsSakClient: KsSakClient = mockk() + private val mockedAdressebeskyttelesesgraderingService: AdressebeskyttelesesgraderingService = mockk() + private val mockedJournalpostBrukerService: JournalpostBrukerService = mockk() + + private val automatiskJournalføringKontantstøtteService: AutomatiskJournalføringKontantstøtteService = + AutomatiskJournalføringKontantstøtteService( + unleashService = mockedUnleashService, + arbeidsfordelingClient = mockedArbeidsfordelingClient, + ksSakClient = mockedKsSakClient, + adressebeskyttelesesgraderingService = mockedAdressebeskyttelesesgraderingService, + journalpostBrukerService = mockedJournalpostBrukerService, + ) + + @Test + fun `skal automatisk journalføre journalposten`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.KON, + ) + } returns identifikator + + every { + mockedKsSakClient.hentMinimalRestFagsak( + fagsakId = fagsakId, + ) + } returns + RestMinimalFagsak( + id = fagsakId, + behandlinger = listOf(), + status = FagsakStatus.LØPENDE, + ) + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.KON, + ) + } returns + Enhet( + enhetId = "enhetId", + enhetNavn = "enhetNavn", + ) + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isTrue() + } + + @Test + fun `skal ikke automatisk journalføre journalposten hvis feature toggle er skrudd av`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns false + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten om journalposten ikke er kontanstøtte søknad`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 33-00.07", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten hvis bruker has sak i infotrygd`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, true, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten hvis søknad ikke er sendt inn digitalt`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "SKAN_NETS", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten hvis geografisk behandlende enhet er i listen over eksluderte enheter`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.KON, + ) + } returns + Enhet( + enhetId = "4863", + enhetNavn = "midlertidigEnhet", + ) + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.KON, + ) + } returns identifikator + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten hvis en av personene i søknaden har adressebeskyttelsegradering strengt fortrolig`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns true + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } + + @Test + fun `skal ikke automatisk journalføre journalposten om det finnes en åpen behandling på fagsak`() { + // Arrange + val identifikator = "123" + val fagsakId = 1L + + val journalpost = + Journalpost( + journalpostId = "1", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + bruker = + Bruker( + id = identifikator, + type = BrukerIdType.FNR, + ), + kanal = "NAV_NO", + dokumenter = + listOf( + DokumentInfo( + brevkode = "NAV 34-00.08", + tittel = "Søknad", + dokumentstatus = Dokumentstatus.FERDIGSTILT, + dokumentvarianter = emptyList(), + ), + ), + ) + + every { + mockedUnleashService.isEnabled( + toggleId = FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, + defaultValue = false, + ) + } returns true + + every { + mockedJournalpostBrukerService.tilPersonIdent( + bruker = journalpost.bruker!!, + tema = Tema.KON, + ) + } returns identifikator + + every { + mockedKsSakClient.hentMinimalRestFagsak( + fagsakId = fagsakId, + ) + } returns + RestMinimalFagsak( + id = fagsakId, + behandlinger = + listOf( + RestVisningBehandling( + behandlingId = 12931230L, + opprettetTidspunkt = LocalDateTime.now(), + kategori = BehandlingKategori.NASJONAL, + aktiv = true, + underkategori = BehandlingUnderkategori.ORDINÆR, + status = BehandlingStatus.UTREDES, + type = BehandlingType.FØRSTEGANGSBEHANDLING, + ), + ), + status = FagsakStatus.LØPENDE, + ) + + every { + mockedAdressebeskyttelesesgraderingService.finnesStrengtFortroligAdressebeskyttelsegraderingPåJournalpost( + tema = Tema.KON, + journalpost = journalpost, + ) + } returns false + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent( + personIdent = identifikator, + tema = Tema.KON, + ) + } returns + Enhet( + enhetId = "enhetId", + enhetNavn = "enhetNavn", + ) + + // Act + val skalAutomatiskJournalføres = automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(journalpost, false, fagsakId) + + // Assert + assertThat(skalAutomatiskJournalføres).isFalse() + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerServiceTest.kt" new file mode 100644 index 000000000..9c8207adf --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/journalf\303\270ring/JournalpostBrukerServiceTest.kt" @@ -0,0 +1,85 @@ +package no.nav.familie.baks.mottak.journalføring + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.integrasjoner.Bruker +import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType +import no.nav.familie.baks.mottak.integrasjoner.PdlClient +import no.nav.familie.kontrakter.felles.Tema +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +class JournalpostBrukerServiceTest { + private val mockedPdlClient: PdlClient = mockk() + private val journalpostBrukerService: JournalpostBrukerService = + JournalpostBrukerService( + pdlClient = mockedPdlClient, + ) + + @Test + fun `skal finne bruker ident for AKTOERID`() { + // Arrange + val bruker = + Bruker( + id = "1", + type = BrukerIdType.AKTOERID, + ) + + every { + mockedPdlClient.hentPersonident( + aktørId = bruker.id, + tema = Tema.BAR, + ) + } returns "2" + + // Act + val brukerIdent = + journalpostBrukerService.tilPersonIdent( + bruker = bruker, + tema = Tema.BAR, + ) + + // Assert + assertThat(brukerIdent).isEqualTo("2") + } + + @Test + fun `skal returnere fnr som brukers ident for bruker med fnr`() { + // Arrange + val bruker = + Bruker( + id = "1", + type = BrukerIdType.FNR, + ) + + // Act + val brukerIdent = + journalpostBrukerService.tilPersonIdent( + bruker = bruker, + tema = Tema.BAR, + ) + + // Assert + assertThat(brukerIdent).isEqualTo("1") + } + + @Test + fun `skal returnere orgnr som brukers ident for bruker med orgn`() { + // Arrange + val bruker = + Bruker( + id = "9", + type = BrukerIdType.ORGNR, + ) + + // Act + val brukerIdent = + journalpostBrukerService.tilPersonIdent( + bruker = bruker, + tema = Tema.BAR, + ) + + // Assert + assertThat(brukerIdent).isEqualTo("9") + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTaskTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTaskTest.kt" index 4d5a56723..7f103a52b 100644 --- "a/src/test/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTaskTest.kt" +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/task/JournalhendelseKontantst\303\270tteRutingTaskTest.kt" @@ -1,15 +1,11 @@ package no.nav.familie.baks.mottak.task import io.mockk.every -import io.mockk.impl.annotations.InjectMockKs -import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension import io.mockk.mockk import io.mockk.slot import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService import no.nav.familie.baks.mottak.domene.personopplysning.Person -import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient import no.nav.familie.baks.mottak.integrasjoner.BarnDto import no.nav.familie.baks.mottak.integrasjoner.Bruker import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType @@ -26,6 +22,8 @@ import no.nav.familie.baks.mottak.integrasjoner.KsSakClient import no.nav.familie.baks.mottak.integrasjoner.PdlClient import no.nav.familie.baks.mottak.integrasjoner.RestMinimalFagsak import no.nav.familie.baks.mottak.integrasjoner.StonadDto +import no.nav.familie.baks.mottak.journalføring.AutomatiskJournalføringKontantstøtteService +import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService import no.nav.familie.kontrakter.felles.Tema import no.nav.familie.kontrakter.felles.oppgave.IdentGruppe import no.nav.familie.kontrakter.felles.personopplysning.FORELDERBARNRELASJONROLLE @@ -33,36 +31,29 @@ import no.nav.familie.kontrakter.felles.personopplysning.ForelderBarnRelasjon import no.nav.familie.prosessering.domene.Task import no.nav.familie.prosessering.internal.TaskService import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import java.time.YearMonth import java.util.Properties import kotlin.test.assertEquals -@ExtendWith(MockKExtension::class) class JournalhendelseKontantstøtteRutingTaskTest { - @MockK - private lateinit var pdlClient: PdlClient - - @MockK - private lateinit var infotrygdKontantstøtteClient: InfotrygdKontantstøtteClient - - @MockK - private lateinit var taskService: TaskService - - @MockK - private lateinit var ksSakClient: KsSakClient - - @MockK - private lateinit var journalpostClient: JournalpostClient - - @MockK - private lateinit var unleashService: UnleashNextMedContextService - - @MockK - private lateinit var arbeidsfordelingClient: ArbeidsfordelingClient - - @InjectMockKs - private lateinit var journalhendelseKontantstøtteRutingTask: JournalhendelseKontantstøtteRutingTask + private val pdlClient: PdlClient = mockk() + private val infotrygdKontantstøtteClient: InfotrygdKontantstøtteClient = mockk() + private val taskService: TaskService = mockk() + private val ksSakClient: KsSakClient = mockk() + private val journalpostClient: JournalpostClient = mockk() + private val unleashService: UnleashNextMedContextService = mockk() + private val automatiskJournalføringKontantstøtteService: AutomatiskJournalføringKontantstøtteService = mockk() + private val journalpostBrukerService: JournalpostBrukerService = mockk() + private val journalhendelseKontantstøtteRutingTask: JournalhendelseKontantstøtteRutingTask = + JournalhendelseKontantstøtteRutingTask( + pdlClient = pdlClient, + ksSakClient = ksSakClient, + infotrygdKontantstøtteClient = infotrygdKontantstøtteClient, + taskService = taskService, + journalpostClient = journalpostClient, + automatiskJournalføringKontantstøtteService = automatiskJournalføringKontantstøtteService, + journalpostBrukerService = journalpostBrukerService, + ) val søkerFnr = "12345678910" val barn1Fnr = "11223344556" @@ -70,9 +61,11 @@ class JournalhendelseKontantstøtteRutingTaskTest { @Test fun `doTask - skal opprette OpprettJournalføringOppgaveTask med informasjon om at det finnes løpende sak i Infotrygd når et eller flere av barna har løpende sak i Infotrygd`() { + // Arrange val taskSlot = slot() setupPDLMocks() setupKsSakClientMocks() + every { journalpostBrukerService.tilPersonIdent(any(), any()) } returns "TEST" every { unleashService.isEnabled(FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, false) } returns false every { infotrygdKontantstøtteClient.harKontantstøtteIInfotrygd(any()) } returns true @@ -102,6 +95,11 @@ class JournalhendelseKontantstøtteRutingTaskTest { ) every { taskService.save(capture(taskSlot)) } returns mockk() + every { + automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + // Act journalhendelseKontantstøtteRutingTask.doTask( Task( type = JournalhendelseKontantstøtteRutingTask.TASK_STEP_TYPE, @@ -116,14 +114,17 @@ class JournalhendelseKontantstøtteRutingTaskTest { ), ) + // Assert assertEquals("Et eller flere av barna har løpende sak i Infotrygd", taskSlot.captured.payload) } @Test fun `doTask - skal opprette OpprettJournalføringOppgaveTask med tom sakssystem-markering når et eller flere av barna har sak i Infotrygd men ingen løpende`() { + // Arrange val taskSlot = slot() setupPDLMocks() setupKsSakClientMocks() + every { journalpostBrukerService.tilPersonIdent(any(), any()) } returns "TEST" every { unleashService.isEnabled(FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, false) } returns false every { infotrygdKontantstøtteClient.harKontantstøtteIInfotrygd(any()) } returns true @@ -153,6 +154,11 @@ class JournalhendelseKontantstøtteRutingTaskTest { ) every { taskService.save(capture(taskSlot)) } returns mockk() + every { + automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + // Act journalhendelseKontantstøtteRutingTask.doTask( Task( type = JournalhendelseKontantstøtteRutingTask.TASK_STEP_TYPE, @@ -167,14 +173,17 @@ class JournalhendelseKontantstøtteRutingTaskTest { ), ) + // Assert assertEquals("", taskSlot.captured.payload) } @Test fun `doTask - skal opprette OpprettJournalføringOppgaveTask med tom sakssystem-markering når ingen av barna har sak i Infotrygd`() { + // Arrange val taskSlot = slot() setupPDLMocks() setupKsSakClientMocks() + every { journalpostBrukerService.tilPersonIdent(any(), any()) } returns "TEST" every { unleashService.isEnabled(FeatureToggleConfig.AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER, false) } returns false every { infotrygdKontantstøtteClient.harKontantstøtteIInfotrygd(any()) } returns false @@ -188,6 +197,12 @@ class JournalhendelseKontantstøtteRutingTaskTest { journalstatus = Journalstatus.JOURNALFOERT, bruker = Bruker("testId", type = BrukerIdType.AKTOERID), ) + + every { + automatiskJournalføringKontantstøtteService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + // Act journalhendelseKontantstøtteRutingTask.doTask( Task( type = JournalhendelseKontantstøtteRutingTask.TASK_STEP_TYPE, @@ -202,6 +217,7 @@ class JournalhendelseKontantstøtteRutingTaskTest { ), ) + // Assert assertEquals("", taskSlot.captured.payload) } @@ -239,8 +255,6 @@ class JournalhendelseKontantstøtteRutingTaskTest { historisk = false, ), ) - - every { pdlClient.hentPersonident(any(), any()) } returns "TEST" } private fun setupKsSakClientMocks() { diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/task/NavnoHendelseTaskL\303\270ypeTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/task/NavnoHendelseTaskL\303\270ypeTest.kt" index d9590fbdf..c0c8d0c7b 100644 --- "a/src/test/kotlin/no/nav/familie/baks/mottak/task/NavnoHendelseTaskL\303\270ypeTest.kt" +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/task/NavnoHendelseTaskL\303\270ypeTest.kt" @@ -6,7 +6,6 @@ import io.mockk.mockk import io.mockk.slot import io.mockk.verify import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService -import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient import no.nav.familie.baks.mottak.integrasjoner.BaSakClient import no.nav.familie.baks.mottak.integrasjoner.Bruker import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType @@ -23,10 +22,12 @@ import no.nav.familie.baks.mottak.integrasjoner.Opphørsgrunn.MIGRERT import no.nav.familie.baks.mottak.integrasjoner.PdlClient import no.nav.familie.baks.mottak.integrasjoner.RestFagsakDeltager import no.nav.familie.baks.mottak.integrasjoner.StatusKode +import no.nav.familie.baks.mottak.journalføring.AutomatiskJournalføringBarnetrygdService +import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService import no.nav.familie.kontrakter.ba.infotrygd.InfotrygdSøkResponse import no.nav.familie.prosessering.domene.Task import no.nav.familie.prosessering.internal.TaskService -import org.assertj.core.api.Assertions +import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance @@ -43,18 +44,19 @@ class NavnoHendelseTaskLøypeTest { private val mockPdlClient: PdlClient = mockk(relaxed = true) private val mockInfotrygdBarnetrygdClient: InfotrygdBarnetrygdClient = mockk() private val mockUnleashNextMedContextService: UnleashNextMedContextService = mockk() - private val mockkArbeidsfordelingClient: ArbeidsfordelingClient = mockk() + private val mockAutomatiskJournalføringBarnetrygdService: AutomatiskJournalføringBarnetrygdService = mockk() + private val mockJournalpostBrukerService: JournalpostBrukerService = mockk() private val rutingSteg = JournalhendelseBarnetrygdRutingTask( - mockPdlClient, - mockSakClient, - mockInfotrygdBarnetrygdClient, - mockTaskService, - mockUnleashNextMedContextService, - mockJournalpostClient, - mockkArbeidsfordelingClient, - mockUnleashNextMedContextService, + pdlClient = mockPdlClient, + baSakClient = mockSakClient, + infotrygdBarnetrygdClient = mockInfotrygdBarnetrygdClient, + taskService = mockTaskService, + journalpostClient = mockJournalpostClient, + unleashNextMedContextService = mockUnleashNextMedContextService, + automatiskJournalføringBarnetrygdService = mockAutomatiskJournalføringBarnetrygdService, + journalpostBrukerService = mockJournalpostBrukerService, ) private val journalføringSteg = @@ -109,53 +111,68 @@ class NavnoHendelseTaskLøypeTest { every { mockUnleashNextMedContextService.isEnabled(any(), any()) } returns false + + every { mockJournalpostBrukerService.tilPersonIdent(any(), any()) } returns "12345678910" } @Test fun `Skal opprette JFR-oppgave med tekst om at bruker har sak i BA-sak`() { + // Arrange every { mockSakClient.hentRestFagsakDeltagerListe(any(), emptyList()) - } returns listOf(RestFagsakDeltager("12345678901", FORELDER, FAGSAK_ID.toLong(), LØPENDE)) + } returns listOf(RestFagsakDeltager("12345678901", FORELDER, FAGSAK_ID, LØPENDE)) every { mockSakClient.hentFagsaknummerPåPersonident(any()) } returns FAGSAK_ID + every { mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) } returns false + + // Act kjørRutingTaskOgReturnerNesteTask().run { - Assertions.assertThat(this.type).isEqualTo(OpprettJournalføringOppgaveTask.TASK_STEP_TYPE) + assertThat(this.type).isEqualTo(OpprettJournalføringOppgaveTask.TASK_STEP_TYPE) journalføringSteg.doTask(this) } + // Assert val oppgaveBeskrivelse = slot() verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(oppgaveBeskrivelse)) } - Assertions.assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i BA-sak") + assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i BA-sak") } @Test fun `Skal opprette JFR-oppgave med tekst om at bruker har sak i Infotrygd`() { + // Arrange every { mockInfotrygdBarnetrygdClient.hentLøpendeUtbetalinger(any(), any()) } returns InfotrygdSøkResponse(listOf(StønadDto()), emptyList()) + every { mockSakClient.hentFagsaknummerPåPersonident(any()) } returns FAGSAK_ID + + every { mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) } returns false + + // Act kjørRutingTaskOgReturnerNesteTask().run { - Assertions.assertThat(this.type).isEqualTo(OpprettJournalføringOppgaveTask.TASK_STEP_TYPE) + assertThat(this.type).isEqualTo(OpprettJournalføringOppgaveTask.TASK_STEP_TYPE) journalføringSteg.doTask(this) } + // Assert val oppgaveBeskrivelse = slot() verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(oppgaveBeskrivelse)) } - Assertions.assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i Infotrygd") + assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i Infotrygd") } @Test fun `Skal opprette JFR-oppgave med tekst om at bruker har sak begge steder`() { + // Arrange every { mockSakClient.hentRestFagsakDeltagerListe(any(), emptyList()) - } returns listOf(RestFagsakDeltager("12345678901", FORELDER, FAGSAK_ID.toLong(), LØPENDE)) + } returns listOf(RestFagsakDeltager("12345678901", FORELDER, FAGSAK_ID, LØPENDE)) every { mockSakClient.hentFagsaknummerPåPersonident(any()) } returns FAGSAK_ID @@ -163,22 +180,31 @@ class NavnoHendelseTaskLøypeTest { mockInfotrygdBarnetrygdClient.hentLøpendeUtbetalinger(any(), any()) } returns InfotrygdSøkResponse(listOf(StønadDto()), listOf(StønadDto())) + every { mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) } returns false + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + // Assert val oppgaveBeskrivelse = slot() verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(oppgaveBeskrivelse)) } - Assertions.assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i både Infotrygd og BA-sak") + assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i både Infotrygd og BA-sak") } @Test fun `Skal opprette JFR-oppgave uten tekst siden bruker ikke har sak i noen system`() { - kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + // Arrange + every { mockSakClient.hentFagsaknummerPåPersonident(any()) } returns FAGSAK_ID - val oppgaveBeskrivelse = slot() + every { mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) } returns false + // Act + kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), null) } @@ -186,6 +212,7 @@ class NavnoHendelseTaskLøypeTest { @Test fun `Skal opprette JFR-oppgave med henvisning til BA-sak når bruker er migrert fra Infotrygd`() { + // Arrange every { mockSakClient.hentRestFagsakDeltagerListe(any(), emptyList()) } returns listOf(RestFagsakDeltager("12345678901", FORELDER, FAGSAK_ID.toLong(), LØPENDE)) @@ -206,14 +233,18 @@ class NavnoHendelseTaskLøypeTest { emptyList(), ) + every { mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) } returns false + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + // Assert val oppgaveBeskrivelse = slot() verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(oppgaveBeskrivelse)) } - Assertions.assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i BA-sak") + assertThat(oppgaveBeskrivelse.captured).isEqualTo("Bruker har sak i BA-sak") } private fun kjørRutingTaskOgReturnerNesteTask(): Task { @@ -239,7 +270,7 @@ class NavnoHendelseTaskLøypeTest { companion object { private const val JOURNALPOST_ID = "222" - private const val FAGSAK_ID = "1" + private const val FAGSAK_ID = 1L private const val MOTTAK_KANAL = "NAV_NO" } } diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/task/SkanHendelseTaskL\303\270ypeTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/task/SkanHendelseTaskL\303\270ypeTest.kt" index 3870b0f77..130c6a8d2 100644 --- "a/src/test/kotlin/no/nav/familie/baks/mottak/task/SkanHendelseTaskL\303\270ypeTest.kt" +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/task/SkanHendelseTaskL\303\270ypeTest.kt" @@ -7,7 +7,6 @@ import io.mockk.slot import io.mockk.verify import no.nav.familie.baks.mottak.config.featureToggle.UnleashNextMedContextService import no.nav.familie.baks.mottak.hendelser.JournalføringHendelseServiceTest -import no.nav.familie.baks.mottak.integrasjoner.ArbeidsfordelingClient import no.nav.familie.baks.mottak.integrasjoner.BaSakClient import no.nav.familie.baks.mottak.integrasjoner.Bruker import no.nav.familie.baks.mottak.integrasjoner.BrukerIdType @@ -23,6 +22,8 @@ import no.nav.familie.baks.mottak.integrasjoner.Journalstatus import no.nav.familie.baks.mottak.integrasjoner.OppgaveClient import no.nav.familie.baks.mottak.integrasjoner.PdlClient import no.nav.familie.baks.mottak.integrasjoner.RestFagsakDeltager +import no.nav.familie.baks.mottak.journalføring.AutomatiskJournalføringBarnetrygdService +import no.nav.familie.baks.mottak.journalføring.JournalpostBrukerService import no.nav.familie.kontrakter.ba.infotrygd.InfotrygdSøkResponse import no.nav.familie.kontrakter.felles.oppgave.OppgaveResponse import no.nav.familie.prosessering.domene.Task @@ -43,18 +44,19 @@ class SkanHendelseTaskLøypeTest { private val mockPdlClient: PdlClient = mockk(relaxed = true) private val mockInfotrygdBarnetrygdClient: InfotrygdBarnetrygdClient = mockk() private val mockUnleashNextMedContextService: UnleashNextMedContextService = mockk() - private val mockkArbeidsfordelingClient: ArbeidsfordelingClient = mockk() + private val mockAutomatiskJournalføringBarnetrygdService: AutomatiskJournalføringBarnetrygdService = mockk() + private val mockJournalpostBrukerService: JournalpostBrukerService = mockk() private val rutingSteg = JournalhendelseBarnetrygdRutingTask( - mockPdlClient, - mockSakClient, - mockInfotrygdBarnetrygdClient, - mockTaskService, - mockUnleashNextMedContextService, - mockJournalpostClient, - mockkArbeidsfordelingClient, - mockUnleashNextMedContextService, + pdlClient = mockPdlClient, + baSakClient = mockSakClient, + infotrygdBarnetrygdClient = mockInfotrygdBarnetrygdClient, + taskService = mockTaskService, + journalpostClient = mockJournalpostClient, + unleashNextMedContextService = mockUnleashNextMedContextService, + automatiskJournalføringBarnetrygdService = mockAutomatiskJournalføringBarnetrygdService, + journalpostBrukerService = mockJournalpostBrukerService, ) private val journalføringSteg = @@ -91,10 +93,6 @@ class SkanHendelseTaskLøypeTest { mockTaskService.save(any()) } returns Task("dummy", "payload") - every { - mockPdlClient.hentPersonident(any(), any()) - } returns "12345678910" - every { mockPdlClient.hentIdenter(any(), any()) } returns listOf(IdentInformasjon("12345678910", historisk = false, gruppe = "FOLKEREGISTERIDENT")) @@ -114,10 +112,13 @@ class SkanHendelseTaskLøypeTest { every { mockUnleashNextMedContextService.isEnabled(any(), any()) } returns false + + every { mockJournalpostBrukerService.tilPersonIdent(any(), any()) } returns "12345678910" } @Test fun `Oppretter oppgave med beskrivelse som sier at bruker på journalpost har sak i ba-sak`() { + // Arrange val sakssystemMarkering = slot() every { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(sakssystemMarkering)) @@ -127,14 +128,26 @@ class SkanHendelseTaskLøypeTest { mockSakClient.hentRestFagsakDeltagerListe(any(), emptyList()) } returns listOf(RestFagsakDeltager("12345678910", FORELDER, 1L, LØPENDE)) + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert assertThat(sakssystemMarkering.captured).contains("Bruker har sak i BA-sak") } @Test fun `Oppretter oppgave med beskrivelse som sier at søsken har sak i ba-sak`() { + // Arrange val sakssystemMarkering = slot() every { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(sakssystemMarkering)) @@ -144,14 +157,26 @@ class SkanHendelseTaskLøypeTest { mockSakClient.hentRestFagsakDeltagerListe(any(), emptyList()) } returns listOf(RestFagsakDeltager("12345678910", BARN, 1L, LØPENDE)) + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert assertThat(sakssystemMarkering.captured).contains("Søsken har sak i BA-sak") } @Test fun `Oppretter oppgave med beskrivelse som sier at bruker har sak i Infotrygd`() { + // Arrange val sakssystemMarkering = slot() every { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(sakssystemMarkering)) @@ -161,14 +186,26 @@ class SkanHendelseTaskLøypeTest { mockInfotrygdBarnetrygdClient.hentLøpendeUtbetalinger(any(), any()) } returns InfotrygdSøkResponse(listOf(StønadDto()), listOf(StønadDto())) + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert assertThat(sakssystemMarkering.captured).contains("Bruker har sak i Infotrygd") } @Test fun `Oppretter oppgave med beskrivelse som sier at søsken har sak i Infotrygd`() { + // Arrange val sakssystemMarkering = slot() every { mockOppgaveClient.opprettJournalføringsoppgave(any(), capture(sakssystemMarkering)) @@ -178,21 +215,44 @@ class SkanHendelseTaskLøypeTest { mockInfotrygdBarnetrygdClient.hentSaker(any(), any()) } returns InfotrygdSøkResponse(emptyList(), listOf(SakDto(status = "UB"))) + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert assertThat(sakssystemMarkering.captured).contains("Søsken har sak i Infotrygd") } @Test fun `Oppretter oppgave uten markering av sakssystem når bruker ikke har sak fra før`() { + // Arrange every { mockOppgaveClient.opprettJournalføringsoppgave(any()) } returns OppgaveResponse(1) + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + // Act kjørRutingTaskOgReturnerNesteTask().run { journalføringSteg.doTask(this) } + + // Assert verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), beskrivelse = null) } @@ -200,13 +260,25 @@ class SkanHendelseTaskLøypeTest { @Test fun `Oppretter oppgave uten markering av sakssystem når journalpost mangler bruker`() { + // Arrange every { mockOppgaveClient.opprettJournalføringsoppgave(any()) } returns OppgaveResponse(1) + every { + mockAutomatiskJournalføringBarnetrygdService.skalAutomatiskJournalføres(any(), any(), any()) + } returns false + + every { + mockSakClient.hentFagsaknummerPåPersonident(any()) + } returns 1L + + // Act kjørRutingTaskOgReturnerNesteTask(brukerId = null).run { journalføringSteg.doTask(this) } + + // Assert verify(exactly = 1) { mockOppgaveClient.opprettJournalføringsoppgave(any(), beskrivelse = null) }