Skip to content

Commit a622e6b

Browse files
committed
Inntak av nytt felt fra k9-klage, samt restklient for å hente opplysningen retroaktivt
1 parent f543366 commit a622e6b

15 files changed

+185
-5
lines changed

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ val vaultJdbcVersion = "1.3.10"
77
val koinVersion = "4.0.2"
88
val kotliqueryVersion = "1.9.1"
99
val k9SakVersion = "5.3.6"
10-
val k9KlageVersion = "0.4.5"
10+
val k9KlageVersion = "0.4.6"
1111
val fuelVersion = "2.3.1"
1212
val jacksonVersion = "2.17.2"
1313
val commonsTextVersion = "1.13.0"

nais/dev-fss.json

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"db_vault_mountpath": "postgresql/preprod-fss/",
2121
"pdl_url": "https://pdl-api.intern.dev.nav.no/graphql",
2222
"app_k9sak_url": "https://k9-sak.nais.preprod.local/k9/sak/api",
23+
"app_k9klage_url": "https://k9-klage.nais.preprod.local/k9/klage/api",
2324
"app_k9sak_frontend_url": "https://k9.dev.intern.nav.no/k9/web",
2425
"app_k9punsj_frontend_url": "https://k9-punsj-frontend.intern.dev.nav.no",
2526
"bootstrap_servers": "b27apvl00045.preprod.local:8443,b27apvl00046.preprod.local:8443,b27apvl00047.preprod.local:8443",

nais/prod-fss.json

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"db_vault_mountpath": "postgresql/prod-fss/",
2121
"pdl_url": "https://pdl-api.nais.adeo.no/graphql",
2222
"app_k9sak_url": "https://k9-sak.nais.adeo.no/k9/sak/api",
23+
"app_k9klage_url": "https://k9-klage.nais.prod.local/k9/klage/api",
2324
"app_k9sak_frontend_url": "https://k9.intern.nav.no/k9/web",
2425
"app_k9punsj_frontend_url": "https://k9-punsj-frontend.intern.nav.no",
2526
"bootstrap_servers": "a01apvl00145.adeo.no:8443,a01apvl00146.adeo.no:8443,a01apvl00147.adeo.no:8443,a01apvl00148.adeo.no:8443,a01apvl00149.adeo.no:8443,a01apvl00150.adeo.no:8443",

src/main/kotlin/no/nav/k9/los/Configuration.kt

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ data class Configuration(private val config: ApplicationConfig) {
2727

2828
internal fun pdlUrl() = URI(config.getRequiredString("nav.register_urls.pdl_url", secret = false))
2929
internal fun k9Url() = config.getRequiredString("nav.register_urls.k9_url", secret = false)
30+
internal fun k9KlageUrl() = config.getRequiredString("nav.register_urls.k9_klage_url", secret = false)
3031
internal fun k9FrontendUrl() = config.getRequiredString("nav.register_urls.k9_frontend_url", secret = false)
3132
internal fun k9PunsjFrontendUrl() = config.getRequiredString("nav.register_urls.k9_punsj_frontend_url", secret = false)
3233

src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/k9sakberiker/K9SakBerikerSystemKlient.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class K9SakBerikerSystemKlient(
7979

8080
if (ignorerManglendeTilgangPgaUtdatertTestdata) {
8181
return null
82-
} else throw IllegalStateException("Feil ved henting av behandling fra k9-sak")
82+
} else throw IllegalStateException("Feil ved henting av data fra k9-sak")
8383

8484
}
8585
)

src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/mottak/klagetillos/EventTilDtoMapper.kt

+36-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos
22

33
import no.nav.k9.klage.kodeverk.behandling.BehandlingResultatType
44
import no.nav.k9.klage.kodeverk.behandling.BehandlingStatus
5+
import no.nav.k9.klage.kodeverk.behandling.BehandlingType
56
import no.nav.k9.klage.kodeverk.behandling.BehandlingÅrsakType
67
import no.nav.k9.klage.kodeverk.behandling.aksjonspunkt.AksjonspunktDefinisjon
78
import no.nav.k9.klage.kodeverk.behandling.aksjonspunkt.AksjonspunktStatus
89
import no.nav.k9.klage.kodeverk.behandling.aksjonspunkt.AksjonspunktType
910
import no.nav.k9.klage.kodeverk.behandling.aksjonspunkt.Venteårsak
1011
import no.nav.k9.klage.kontrakt.behandling.oppgavetillos.Aksjonspunkttilstand
1112
import no.nav.k9.klage.kontrakt.behandling.oppgavetillos.KlagebehandlingProsessHendelse
13+
import no.nav.k9.klage.kontrakt.produksjonsstyring.los.LosOpplysningerSomManglerHistoriskIKlageDto
1214
import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveDto
1315
import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveFeltverdiDto
1416
import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3
@@ -33,6 +35,7 @@ class EventTilDtoMapper {
3335
internal fun lagOppgaveDto(
3436
event: KlagebehandlingProsessHendelse,
3537
losOpplysningerSomManglerIKlageDto: LosOpplysningerSomManglerIKlageDto?,
38+
losOpplysningerSomManglerHistoriskIKlageDto: LosOpplysningerSomManglerHistoriskIKlageDto?,
3639
forrigeOppgave: OppgaveV3?
3740
) = OppgaveDto(
3841
id = event.eksternId.toString(),
@@ -55,7 +58,7 @@ class EventTilDtoMapper {
5558
},
5659
endretTidspunkt = event.eventTid,
5760
reservasjonsnøkkel = utledReservasjonsnøkkel(event),
58-
feltverdier = lagFeltverdier(event, losOpplysningerSomManglerIKlageDto, forrigeOppgave)
61+
feltverdier = lagFeltverdier(event, losOpplysningerSomManglerIKlageDto, losOpplysningerSomManglerHistoriskIKlageDto, forrigeOppgave)
5962
)
6063

6164
private fun utledReservasjonsnøkkel(event: KlagebehandlingProsessHendelse): String {
@@ -96,10 +99,13 @@ class EventTilDtoMapper {
9699
private fun lagFeltverdier(
97100
event: KlagebehandlingProsessHendelse,
98101
losOpplysningerSomManglerIKlageDto: LosOpplysningerSomManglerIKlageDto?,
102+
losOpplysningerSomManglerHistoriskIKlageDto: LosOpplysningerSomManglerHistoriskIKlageDto?,
99103
forrigeOppgave: OppgaveV3?
100104
): List<OppgaveFeltverdiDto> {
101105
val oppgaveFeltverdiDtos = mapEnkeltverdier(event, losOpplysningerSomManglerIKlageDto, forrigeOppgave)
102106

107+
utledPåklagdBehandlingtype(event, losOpplysningerSomManglerHistoriskIKlageDto, oppgaveFeltverdiDtos)
108+
103109
val åpneAksjonspunkter = getåpneAksjonspunkter(event)
104110

105111
val harAutopunkt = åpneAksjonspunkter.any { aksjonspunktTilstandDto ->
@@ -345,6 +351,35 @@ class EventTilDtoMapper {
345351
}
346352
}.filterNotNull().toMutableList()
347353

354+
fun utledPåklagdBehandlingtype(
355+
event: KlagebehandlingProsessHendelse,
356+
losOpplysningerSomManglerHistoriskIKlageDto: LosOpplysningerSomManglerHistoriskIKlageDto?,
357+
oppgaveFeltverdiDtos: MutableList<OppgaveFeltverdiDto>
358+
) {
359+
val påklagdBehandlingType = event.påklagdBehandlingType?.let { mapBehandlingtype(it) }
360+
?: losOpplysningerSomManglerHistoriskIKlageDto?.påklagdBehandlingType?.let { mapBehandlingtype(it) }
361+
362+
påklagdBehandlingType?.let {
363+
oppgaveFeltverdiDtos.add(OppgaveFeltverdiDto(
364+
nøkkel = "påklagdBehandlingtype",
365+
verdi = it
366+
)
367+
)
368+
}
369+
370+
}
371+
372+
private fun mapBehandlingtype(behandlingType: BehandlingType) : String {
373+
return when (behandlingType) {
374+
BehandlingType.TILBAKEKREVING, BehandlingType.REVURDERING_TILBAKEKREVING -> {
375+
"k9-tilbake"
376+
}
377+
else -> {
378+
"k9-sak"
379+
}
380+
}
381+
}
382+
348383
@VisibleForTesting
349384
fun utledTidFørsteGangHosBeslutter(
350385
forrigeOppgave: OppgaveV3?,

src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/mottak/klagetillos/K9KlageTilLosAdapterTjeneste.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager
99
import no.nav.k9.los.domene.repository.BehandlingProsessEventKlageRepository
1010
import no.nav.k9.los.jobber.JobbMetrikker
1111
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.k9sakberiker.K9SakBerikerInterfaceKludge
12+
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos.beriker.K9KlageBerikerInterfaceKludge
1213
import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonTjeneste
1314
import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonerDto
1415
import no.nav.k9.los.nyoppgavestyring.mottak.omraade.OmrådeRepository
@@ -32,6 +33,7 @@ class K9KlageTilLosAdapterTjeneste(
3233
private val oppgaveV3Tjeneste: OppgaveV3Tjeneste,
3334
private val transactionalManager: TransactionalManager,
3435
private val k9sakBeriker: K9SakBerikerInterfaceKludge,
36+
private val k9klageBeriker: K9KlageBerikerInterfaceKludge,
3537
) {
3638

3739
private val log: Logger = LoggerFactory.getLogger(K9KlageTilLosAdapterTjeneste::class.java)
@@ -117,8 +119,15 @@ class K9KlageTilLosAdapterTjeneste(
117119
behandlingProsessEventer.forEach { event ->
118120
val losOpplysningerSomManglerIKlageDto =
119121
event.påklagdBehandlingEksternId?.let { k9sakBeriker.berikKlage(it) }
122+
123+
val påklagdBehandlingDto = if (event.påklagdBehandlingEksternId != null && event.påklagdBehandlingType == null) {
124+
k9klageBeriker.hentFraK9Klage(event.eksternId)
125+
} else {
126+
null
127+
}
128+
120129
val oppgaveDto =
121-
EventTilDtoMapper.lagOppgaveDto(event, losOpplysningerSomManglerIKlageDto, forrigeOppgave)
130+
EventTilDtoMapper.lagOppgaveDto(event, losOpplysningerSomManglerIKlageDto, påklagdBehandlingDto, forrigeOppgave)
122131

123132
val oppgave = oppgaveV3Tjeneste.sjekkDuplikatOgProsesser(oppgaveDto, tx)
124133

src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/mottak/klagetillos/K9KlageTilLosHistorikkvaskTjeneste.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager
77
import no.nav.k9.los.domene.repository.BehandlingProsessEventKlageRepository
88
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.HistorikkvaskMetrikker
99
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.k9sakberiker.K9SakBerikerInterfaceKludge
10+
import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos.beriker.K9KlageBerikerInterfaceKludge
1011
import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonTjeneste
1112
import no.nav.k9.los.nyoppgavestyring.mottak.feltdefinisjon.FeltdefinisjonerDto
1213
import no.nav.k9.los.nyoppgavestyring.mottak.omraade.OmrådeRepository
@@ -27,6 +28,7 @@ class K9KlageTilLosHistorikkvaskTjeneste(
2728
private val config: Configuration,
2829
private val transactionalManager: TransactionalManager,
2930
private val k9sakBeriker: K9SakBerikerInterfaceKludge,
31+
private val k9klageBeriker: K9KlageBerikerInterfaceKludge,
3032
) {
3133

3234
private val log: Logger = LoggerFactory.getLogger(K9KlageTilLosHistorikkvaskTjeneste::class.java)
@@ -83,8 +85,15 @@ class K9KlageTilLosHistorikkvaskTjeneste(
8385
for (event in behandlingProsessEventer) {
8486
if (eventNrForBehandling > høyesteInternVersjon) { break } //Historikkvasken har funnet eventer som ennå ikke er lastet inn med normalflyt. Dirty eventer skal håndteres av vanlig adaptertjeneste
8587
val losOpplysningerSomManglerIKlageDto = event.påklagdBehandlingEksternId?.let { k9sakBeriker.berikKlage(it) }
88+
89+
val påklagdBehandlingDto = if (event.påklagdBehandlingEksternId != null && event.påklagdBehandlingType == null) {
90+
k9klageBeriker.hentFraK9Klage(event.eksternId)
91+
} else {
92+
null
93+
}
94+
8695
val oppgaveDto =
87-
EventTilDtoMapper.lagOppgaveDto(event, losOpplysningerSomManglerIKlageDto, forrigeOppgave)
96+
EventTilDtoMapper.lagOppgaveDto(event, losOpplysningerSomManglerIKlageDto, påklagdBehandlingDto, forrigeOppgave)
8897

8998
oppgaveV3 = oppgaveV3Tjeneste.utledEksisterendeOppgaveversjon(oppgaveDto, eventNrForBehandling, tx)
9099
oppgaveV3Tjeneste.oppdaterEksisterendeOppgaveversjon(oppgaveV3, eventNrForBehandling, tx)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos.beriker
2+
3+
import no.nav.k9.klage.kontrakt.produksjonsstyring.los.LosOpplysningerSomManglerHistoriskIKlageDto
4+
import java.util.UUID
5+
6+
interface K9KlageBerikerInterfaceKludge {
7+
fun hentFraK9Klage(påklagdBehandlingUUID: UUID, antallForsøk: Int = 3): LosOpplysningerSomManglerHistoriskIKlageDto?
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos.beriker
2+
3+
import no.nav.k9.klage.kodeverk.behandling.BehandlingType
4+
import no.nav.k9.klage.kontrakt.produksjonsstyring.los.LosOpplysningerSomManglerHistoriskIKlageDto
5+
import java.util.*
6+
7+
class K9KlageBerikerKlientLocal : K9KlageBerikerInterfaceKludge {
8+
override fun hentFraK9Klage(
9+
klagdBehandlingUUID: UUID,
10+
antallForsøk: Int
11+
): LosOpplysningerSomManglerHistoriskIKlageDto {
12+
return LosOpplysningerSomManglerHistoriskIKlageDto(BehandlingType.FØRSTEGANGSSØKNAD)
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.mottak.klagetillos.beriker
2+
3+
import com.fasterxml.jackson.module.kotlin.readValue
4+
import com.github.kittinunf.fuel.coroutines.awaitStringResponseResult
5+
import com.github.kittinunf.fuel.httpGet
6+
import io.ktor.http.*
7+
import kotlinx.coroutines.runBlocking
8+
import no.nav.helse.dusseldorf.ktor.core.Retry
9+
import no.nav.helse.dusseldorf.oauth2.client.AccessTokenClient
10+
import no.nav.helse.dusseldorf.oauth2.client.CachedAccessTokenClient
11+
import no.nav.k9.klage.kontrakt.produksjonsstyring.los.LosOpplysningerSomManglerHistoriskIKlageDto
12+
import no.nav.k9.los.Configuration
13+
import no.nav.k9.los.KoinProfile
14+
import no.nav.k9.los.integrasjon.rest.NavHeaders
15+
import no.nav.k9.los.utils.LosObjectMapper
16+
import org.slf4j.LoggerFactory
17+
import java.time.Duration
18+
import java.util.*
19+
20+
class K9KlageBerikerSystemKlient(
21+
private val configuration: Configuration,
22+
private val accessTokenClient: AccessTokenClient,
23+
scope: String
24+
) : K9KlageBerikerInterfaceKludge {
25+
val log = LoggerFactory.getLogger(K9KlageBerikerSystemKlient::class.java)
26+
private val cachedAccessTokenClient = CachedAccessTokenClient(accessTokenClient)
27+
private val url = configuration.k9KlageUrl()
28+
private val scopes = setOf(scope)
29+
30+
override fun hentFraK9Klage(
31+
klagdBehandlingUUID: UUID,
32+
antallForsøk: Int
33+
): LosOpplysningerSomManglerHistoriskIKlageDto? {
34+
return runBlocking { hentKlagedata(påklagdBehandlingUUID, antallForsøk) }
35+
}
36+
37+
private suspend fun hentKlagedata(
38+
klagdBehandlingUUID: UUID,
39+
antallForsøk: Int
40+
): LosOpplysningerSomManglerHistoriskIKlageDto? {
41+
val parameters = listOf(Pair("behandlingUuid", påklagdBehandlingUUID.toString()))
42+
val httpRequest = "${url}/los/historikkutfylling"
43+
.httpGet(parameters)
44+
.header(
45+
//OBS! Dette kalles bare med system token, og skal ikke brukes ved saksbehandler token
46+
HttpHeaders.Authorization to cachedAccessTokenClient.getAccessToken(scopes).asAuthoriationHeader(),
47+
HttpHeaders.Accept to "application/json",
48+
HttpHeaders.ContentType to "application/json",
49+
NavHeaders.CallId to UUID.randomUUID().toString()
50+
)
51+
52+
val (_, response, result) = Retry.retry(
53+
tries = antallForsøk,
54+
operation = "berik",
55+
initialDelay = Duration.ofMillis(200),
56+
factor = 2.0,
57+
logger = log
58+
) { httpRequest.awaitStringResponseResult() }
59+
60+
if (response.statusCode == HttpStatusCode.NoContent.value) {
61+
return null
62+
}
63+
64+
val abc = result.fold(
65+
{ success ->
66+
success
67+
},
68+
{ error ->
69+
val feiltekst = error.response.body().asString("text/plain")
70+
val ignorerManglendeTilgangPgaUtdatertTestdata = configuration.koinProfile == KoinProfile.PREPROD
71+
&& feiltekst.contains("MANGLER_TILGANG_FEIL")
72+
73+
log.error(
74+
(if (ignorerManglendeTilgangPgaUtdatertTestdata) "IGNORERER I DEV: " else "") +
75+
"Error response = '$feiltekst' fra '${httpRequest.url}'"
76+
)
77+
log.error(error.toString())
78+
79+
if (ignorerManglendeTilgangPgaUtdatertTestdata) {
80+
return null
81+
} else throw IllegalStateException("Feil ved henting av behandling fra k9-klage")
82+
}
83+
)
84+
85+
return LosObjectMapper.instance.readValue<LosOpplysningerSomManglerHistoriskIKlageDto>(abc)
86+
}
87+
}

src/main/resources/adapterdefinisjoner/k9-feltdefinisjoner-v2.json

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
"visTilBruker": true,
1818
"kokriterie": false
1919
},
20+
{
21+
"id": "påklagdBehandlingtype",
22+
"visningsnavn": "Påklaget behandlingtype",
23+
"listetype": false,
24+
"tolkesSom": "String",
25+
"visTilBruker": true,
26+
"kokriterie": false
27+
},
2028
{
2129
"id": "aktorId",
2230
"visningsnavn": "Søkers aktør-ID",

src/main/resources/adapterdefinisjoner/k9-oppgavetyper-k9klage.json

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
"visPåOppgave": true,
1717
"påkrevd": false
1818
},
19+
{
20+
"id": "påklagdBehandlingtype",
21+
"visPåOppgave": true,
22+
"påkrevd": false
23+
},
1924
{
2025
"id": "aktorId",
2126
"visPåOppgave": true,

src/main/resources/application.conf

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ nav {
3333
register_urls {
3434
pdl_url: ${?PDL_URL}
3535
k9_url: ${?APP_K9SAK_URL}
36+
k9_klage_url: ${?APP_K9KLAGE_URL}
3637
k9_frontend_url: ${?APP_K9SAK_FRONTEND_URL}
3738
k9_punsj_frontend_url: ${?APP_K9PUNSJ_FRONTEND_URL}
3839
}

src/test/kotlin/no/nav/k9/los/TestConfiguration.kt

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ object TestConfiguration {
2020
)
2121

2222
map["nav.register_urls.k9_url"] = "http://localhost:8080"
23+
map["nav.register_urls.k9_klage_url"] = "http://localhost:8080"
2324
map["nav.register_urls.k9_frontend_url"] = "http://localhost:9000"
2425
map["nav.register_urls.k9_punsj_frontend_url"] = "http://localhost:8080"
2526
map["nav.audit.enabled"] = "false"

0 commit comments

Comments
 (0)