Skip to content

Commit

Permalink
NAV-21852: Ruter journalpost til 2103 Vikafossen (#1155)
Browse files Browse the repository at this point in the history
* NAV-21852: Ruter journalpost til 2103 Vikafossen

* Endret på litt feilmeldinger

* NAV-21852: Legger inn logikk for å hente søker og barna fra søknad basert på journalpostid

* NAV-21852: Ordnet harAdresseGradering sjekk

* NAV-21852: Begynte å skrive enhetstest, splittet opp logikk i egen service

* NAV-21852: La til litt mer logikk i testene

* NAV-21852: Skriver test for SøknadFraJournalpostService for BA-søknader, begynner å fikse tester som brakk + masse ktlint fikser

* NAV-21852: Flytter enhetsnummertester fra OppgaveMapperTest til egen testfil

* NAV-21852: Legger på testing for adressebeskyttelse i enhetsnummerservice

* NAV-21852: Oppdaterer logikk for å håndtere papirsøknader

* NAV-21852: Fikset tester som feilet

* NAV-21852: Ryddet bort ubrukt kode

* Fikset feilende tester etter endring i utledning av enhetsnummer

* ktlint

* NAV-21852: Refaktorerte SøknadsidenterService metodene til å inkludere både barn og søker

* NAV-21852: Skrev manglende enhetstester og kjørte ktlint

* NAV-21852: La til en TODO

* NAV-21852: Forenklet logikk

* NAV-21852: Reverterte logikk fra forrige commit

* NAV-21852: La til enhetstest for papirsøknad

* Endrer logikk for å finne digitale søknader + skrevet flere tester for digitale søknader uten adressebeskyttelse

* Legger til riktig brevkode på noen av testene for å simulere en ordentlig digital søknad

* Legger til feature-toggle for å bruke den nye enhetsnummerservicen

* NAV-21852: Endrer exception-håndtering for journalpost.bruker lik null og legger på litt ekstra logging

* NAV-21852: Retter opp kode basert på PR kommentarer

* NAV-21852: La til en "bedre" feilmelding for når bruker på journalpost er null

* NAV-21852: Rettet opp navn til repo-metoder basert på PR tilbakemeldinger

* NAV-21852: Kjørte ktlint

---------

Co-authored-by: bragejahren <brage.ekroll.jahren@nav.no>
Co-authored-by: Hanne Olsen <hanne.olsen@nav.no>
  • Loading branch information
3 people authored Sep 9, 2024
1 parent b53a012 commit a3bae8b
Show file tree
Hide file tree
Showing 23 changed files with 1,249 additions and 188 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package no.nav.familie.baks.mottak.config.featureToggle
class FeatureToggleConfig {
companion object {
// Operasjonelle
const val HOPP_OVER_INFOTRYGD_SJEKK = "familie-ba-sak.hopp-over-infotrygd-sjekk"

// Release
const val AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER = "familie-baks-mottak.automatisk-journalforing-av-ks-soknad"
const val AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER = "familie-baks-mottak.automatisk-journalforing-av-ba-soknad"
const val HOPP_OVER_INFOTRYGD_SJEKK = "familie-ba-sak.hopp-over-infotrygd-sjekk"
const val BRUK_ENHETSNUMMERSERVICE = "familie-baks-mottak.bruk-enhetsnummerservice"
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package no.nav.familie.baks.mottak.domene.personopplysning

import no.nav.familie.baks.mottak.integrasjoner.Adressebeskyttelsesgradering
import no.nav.familie.kontrakter.felles.personopplysning.Bostedsadresse
import no.nav.familie.kontrakter.felles.personopplysning.ForelderBarnRelasjon

data class Person(
val navn: String?,
val forelderBarnRelasjoner: Set<ForelderBarnRelasjon>,
val bostedsadresse: Bostedsadresse? = null,
val adressebeskyttelseGradering: String? = null,
val adressebeskyttelseGradering: List<Adressebeskyttelsesgradering> = emptyList(),
)

data class Familierelasjon(
Expand All @@ -20,10 +21,6 @@ data class PersonIdent(
)

fun Person.harAdresseGradering(): Boolean =
if (this.adressebeskyttelseGradering == null) {
false
} else {
this.adressebeskyttelseGradering != "UGRADERT"
}
this.adressebeskyttelseGradering.any { it.erFortrolig() || it.erStrengtFortrolig() }

fun Person.harBostedsadresse(): Boolean = this.bostedsadresse != null
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig
import no.nav.familie.baks.mottak.util.erDnummer
import no.nav.familie.baks.mottak.util.erOrgnr
import no.nav.familie.baks.mottak.util.fristFerdigstillelse
Expand All @@ -10,12 +11,15 @@ import no.nav.familie.kontrakter.felles.oppgave.IdentGruppe
import no.nav.familie.kontrakter.felles.oppgave.OppgaveIdentV2
import no.nav.familie.kontrakter.felles.oppgave.Oppgavetype
import no.nav.familie.kontrakter.felles.oppgave.OpprettOppgaveRequest
import no.nav.familie.unleash.UnleashService
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.util.Locale

abstract class AbstractOppgaveMapper(
private val hentEnhetClient: HentEnhetClient,
private val unleashService: UnleashService,
private val enhetsnummerService: EnhetsnummerService,
val pdlClient: PdlClient,
val arbeidsfordelingClient: ArbeidsfordelingClient,
) : IOppgaveMapper {
Expand All @@ -34,7 +38,12 @@ abstract class AbstractOppgaveMapper(
oppgavetype = oppgavetype,
fristFerdigstillelse = fristFerdigstillelse(),
beskrivelse = tilBeskrivelse(journalpost, beskrivelse),
enhetsnummer = utledEnhetsnummer(journalpost),
enhetsnummer =
if (unleashService.isEnabled(FeatureToggleConfig.BRUK_ENHETSNUMMERSERVICE)) {
enhetsnummerService.hentEnhetsnummer(journalpost)
} else {
utledEnhetsnummer(journalpost)
},
behandlingstema = hentBehandlingstemaVerdi(journalpost),
behandlingstype = hentBehandlingstypeVerdi(journalpost),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.harEøsSteg
import no.nav.familie.kontrakter.felles.Behandlingstema
import no.nav.familie.kontrakter.felles.Tema
import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype
import no.nav.familie.unleash.UnleashService
import org.springframework.stereotype.Service

@Service
class BarnetrygdOppgaveMapper(
hentEnhetClient: HentEnhetClient,
unleashService: UnleashService,
enhetsnummerService: EnhetsnummerService,
arbeidsfordelingClient: ArbeidsfordelingClient,
pdlClient: PdlClient,
valknadRepository: SøknadRepository,
) : AbstractOppgaveMapper(hentEnhetClient, pdlClient, arbeidsfordelingClient) {
) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) {
override val tema: Tema = Tema.BAR

// Behandlingstema og behandlingstype settes basert på regelsettet som er dokumentert nederst her: https://confluence.adeo.no/display/TFA/Mottak+av+dokumenter
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.kontrakter.felles.Tema
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.util.Locale

@Service
class EnhetsnummerService(
private val hentEnhetClient: HentEnhetClient,
private val pdlClient: PdlClient,
private valknadsidenterService: SøknadsidenterService,
private val arbeidsfordelingClient: ArbeidsfordelingClient,
) {
private val logger = LoggerFactory.getLogger(this::class.java)
private val secureLogger: Logger = LoggerFactory.getLogger("secureLogger")

fun hentEnhetsnummer(
journalpost: Journalpost,
): String? {
if (journalpost.tema == null) {
logger.error("Journalpost tema er null for journalpost ${journalpost.journalpostId}.")
throw IllegalStateException("Tema er null")
}

if (journalpost.bruker == null) {
logger.error("Bruker for journalpost ${journalpost.journalpostId} er null. Usikker på hvordan dette burde håndteres. Se SecureLogs.")
secureLogger.error("Bruker for journalpost $journalpost er null. Usikker på hvordan dette burde håndteres.")
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() }

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.journalforendeEnhet.isNullOrBlank() -> null
hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).status.uppercase(Locale.getDefault()) == "NEDLAGT" -> null
hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).oppgavebehandler -> journalpost.journalforendeEnhet
else -> {
logger.warn("Enhet ${journalpost.journalforendeEnhet} kan ikke ta i mot oppgaver")
null
}
}
}

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

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

private fun tilPersonIdent(
bruker: Bruker,
tema: Tema,
): String =
when (bruker.type) {
BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema)
else -> bruker.id
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.harEøsSteg
import no.nav.familie.kontrakter.felles.Behandlingstema
import no.nav.familie.kontrakter.felles.Tema
import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype
import no.nav.familie.unleash.UnleashService
import org.springframework.stereotype.Service

@Service
class KontantstøtteOppgaveMapper(
hentEnhetClient: HentEnhetClient,
unleashService: UnleashService,
enhetsnummerService: EnhetsnummerService,
arbeidsfordelingClient: ArbeidsfordelingClient,
pdlClient: PdlClient,
val kontantstøtteSøknadRepository: KontantstøtteSøknadRepository,
) : AbstractOppgaveMapper(hentEnhetClient, pdlClient, arbeidsfordelingClient) {
) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) {
override val tema: Tema = Tema.KON

override fun hentBehandlingstema(journalpost: Journalpost): Behandlingstema? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,7 @@ class PdlClient(
Person(
navn = null,
forelderBarnRelasjoner = forelderBarnRelasjoner,
adressebeskyttelseGradering =
it.adressebeskyttelse
.firstOrNull()
?.gradering
?.name,
adressebeskyttelseGradering = it.adressebeskyttelse.map { it.gradering },
bostedsadresse = it.bostedsadresse.firstOrNull(),
)
}
Expand Down Expand Up @@ -328,6 +324,11 @@ enum class Adressebeskyttelsesgradering {
FORTROLIG, // Kode 7
STRENGT_FORTROLIG, // Kode 6
UGRADERT,
;

fun erStrengtFortrolig() = this == STRENGT_FORTROLIG || this == STRENGT_FORTROLIG_UTLAND

fun erFortrolig(): Boolean = this == FORTROLIG
}

enum class Identgruppe {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package no.nav.familie.baks.mottak.integrasjoner

import no.nav.familie.baks.mottak.søknad.barnetrygd.BarnetrygdSøknadService
import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.BarnetrygdSøknadV8
import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.BarnetrygdSøknadV9
import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadService
import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadV4
import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadV5
import org.springframework.stereotype.Service

@Service
class SøknadsidenterService(
private val barnetrygdSøknadService: BarnetrygdSøknadService,
private val kontantstøtteSøknadService: KontantstøtteSøknadService,
) {
fun hentIdenterForKontantstøtteViaJournalpost(journalpostId: String): Pair<String, List<String>> {
val versjonertSøknad =
kontantstøtteSøknadService
.hentDBKontantstøtteSøknadForJournalpost(journalpostId)
.hentVersjonertKontantstøtteSøknad()
return when (versjonertSøknad) {
is KontantstøtteSøknadV4 ->
Pair(
versjonertSøknad.kontantstøtteSøknad.søker.ident.verdi.values
.first(),
versjonertSøknad.kontantstøtteSøknad.barn.map {
it.ident.verdi.values
.first()
},
)

is KontantstøtteSøknadV5 ->
Pair(
versjonertSøknad.kontantstøtteSøknad.søker.ident.verdi.values
.first(),
versjonertSøknad.kontantstøtteSøknad.barn.map {
it.ident.verdi.values
.first()
},
)
}
}

fun hentIdenterForBarnetrygdViaJournalpost(journalpostId: String): Pair<String, List<String>> {
val versjonertSøknad =
barnetrygdSøknadService
.hentDBSøknadFraJournalpost(journalpostId)
.hentVersjonertSøknad()
return when (versjonertSøknad) {
is BarnetrygdSøknadV8 ->
Pair(
versjonertSøknad.barnetrygdSøknad.søker.ident.verdi.values
.first(),
versjonertSøknad.barnetrygdSøknad.barn.map {
it.ident.verdi.values
.first()
},
)

is BarnetrygdSøknadV9 ->
Pair(
versjonertSøknad.barnetrygdSøknad.søker.ident.verdi.values
.first(),
versjonertSøknad.barnetrygdSøknad.barn.map {
it.ident.verdi.values
.first()
},
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ class BarnetrygdSøknadService(

fun hentDBSøknad(søknadId: Long): DBBarnetrygdSøknad? = søknadRepository.hentDBSøknad(søknadId)

fun finnDBSøknadFraJournalpost(journalpostId: String): DBBarnetrygdSøknad? =
søknadRepository.finnDBSøknadForJournalpost(journalpostId = journalpostId)

fun hentDBSøknadFraJournalpost(journalpostId: String): DBBarnetrygdSøknad =
søknadRepository.finnDBSøknadForJournalpost(journalpostId = journalpostId)
?: throw IllegalStateException("Fant ikke søknad for journalpost $journalpostId")

fun hentLagredeVedlegg(søknad: DBBarnetrygdSøknad): Map<String, DBVedlegg> {
val map = mutableMapOf<String, DBVedlegg>()
vedleggRepository.hentAlleVedlegg(søknad.id).forEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ interface SøknadRepository : JpaRepository<DBBarnetrygdSøknad, String> {
@Query(value = "SELECT s FROM Soknad s WHERE s.id = :soknadId")
fun hentDBSøknad(soknadId: Long): DBBarnetrygdSøknad?

@Query(value = "SELECT s FROM Soknad s WHERE s.journalpostId = :journalpostId")
fun finnDBSøknadForJournalpost(journalpostId: String): DBBarnetrygdSøknad?

@Query(
"SELECT s FROM Soknad s ORDER BY s.opprettetTid DESC LIMIT 1",
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ class KontantstøtteSøknadService(

fun hentDBKontantstøtteSøknad(søknadId: Long): DBKontantstøtteSøknad? = kontantstøtteSøknadRepository.hentSøknad(søknadId)

fun finnDBKontantstøtteSøknadForJournalpost(journalpostId: String): DBKontantstøtteSøknad? =
kontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId = journalpostId)

fun hentDBKontantstøtteSøknadForJournalpost(journalpostId: String): DBKontantstøtteSøknad =
kontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId = journalpostId)
?: throw IllegalStateException("Fant ikke søknad for journalpost $journalpostId")

fun hentLagredeDBKontantstøtteVedlegg(søknad: DBKontantstøtteSøknad): Map<String, DBKontantstotteVedlegg> {
val vedleggMap = mutableMapOf<String, DBKontantstotteVedlegg>()
kontantstøtteVedleggRepository.hentAlleVedlegg(søknad.id).forEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ interface KontantstøtteSøknadRepository : JpaRepository<DBKontantstøtteSøkna
@Query(value = "SELECT s FROM kontantstotte_soknad s WHERE s.id = :soknadId")
fun hentSøknad(soknadId: Long): DBKontantstøtteSøknad?

@Query(value = "SELECT s FROM kontantstotte_soknad s WHERE s.journalpostId = :journalpostId")
fun finnSøknadForJournalpost(journalpostId: String): DBKontantstøtteSøknad?

@Query(
"SELECT s FROM kontantstotte_soknad s ORDER BY s.opprettetTid DESC LIMIT 1",
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
query($ident: ID!) {
person: hentPerson(ident: $ident) {
adressebeskyttelse {
gradering
}
}
}
Loading

0 comments on commit a3bae8b

Please sign in to comment.