From 6fe8fd1e7a5cfd254ea3bc527ac8d360c9193105 Mon Sep 17 00:00:00 2001 From: "Nicolas N." Date: Mon, 20 Jan 2025 13:34:42 +0100 Subject: [PATCH] =?UTF-8?q?EY-4839=20Nytt=20endepunkt=20for=20=C3=A5=20la?= =?UTF-8?q?=20EESSI=20opprette=20oppgave=20hos=20oss=20(#6783)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * EY-4839 Nytt endepunkt for å la EESSI opprette oppgave hos oss * småfikser og readme --- .github/workflows/app-etterlatte-api.yaml | 3 ++ apps/etterlatte-api/.nais/dev-api.yaml | 2 + apps/etterlatte-api/.nais/prod-api.yaml | 1 + apps/etterlatte-api/README.md | 11 ++-- apps/etterlatte-api/build.gradle.kts | 1 + .../kotlin/no/nav/etterlatte/Application.kt | 3 ++ .../no/nav/etterlatte/ApplicationContext.kt | 5 ++ .../nav/etterlatte/oppgave/OppgaveKlient.kt | 50 +++++++++++++++++++ .../no/nav/etterlatte/oppgave/OppgaveRoute.kt | 43 ++++++++++++++++ .../nav/etterlatte/oppgave/OppgaveService.kt | 21 ++++++++ .../client/src/shared/types/oppgave.ts | 1 + .../src/main/kotlin/oppgave/OppgaveIntern.kt | 1 + 12 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveKlient.kt create mode 100644 apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveRoute.kt create mode 100644 apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveService.kt diff --git a/.github/workflows/app-etterlatte-api.yaml b/.github/workflows/app-etterlatte-api.yaml index a5aac6cc935..f6ffd814b2a 100644 --- a/.github/workflows/app-etterlatte-api.yaml +++ b/.github/workflows/app-etterlatte-api.yaml @@ -20,6 +20,7 @@ on: - apps/etterlatte-api/.nais/** - '!apps/etterlatte-api/**.md' - libs/etterlatte-beregning-model/** + - libs/etterlatte-oppgave-model/** - libs/etterlatte-ktor/** - libs/etterlatte-sporingslogg/** - libs/etterlatte-vedtaksvurdering-model/** @@ -32,6 +33,8 @@ on: - apps/etterlatte-api/src/** - apps/etterlatte-api/*.kts - '!apps/etterlatte-api/**.md' + - libs/etterlatte-beregning-model/** + - libs/etterlatte-oppgave-model/** - libs/etterlatte-ktor/** - libs/etterlatte-sporingslogg/** - libs/etterlatte-vedtaksvurdering-model/** diff --git a/apps/etterlatte-api/.nais/dev-api.yaml b/apps/etterlatte-api/.nais/dev-api.yaml index cc57a8bb3e3..e3237334f7f 100644 --- a/apps/etterlatte-api/.nais/dev-api.yaml +++ b/apps/etterlatte-api/.nais/dev-api.yaml @@ -218,6 +218,7 @@ spec: roles: - les-oms-vedtak - les-bp-vedtak + - opprett-jfr-oppgave - application: eessi-pensjon-prefill-q2 namespace: eessipensjon cluster: dev-gcp @@ -232,6 +233,7 @@ spec: roles: - les-oms-vedtak - les-bp-vedtak + - opprett-jfr-oppgave outbound: rules: - application: etterlatte-vedtaksvurdering diff --git a/apps/etterlatte-api/.nais/prod-api.yaml b/apps/etterlatte-api/.nais/prod-api.yaml index 74ae3fc161b..7c6c08169ef 100644 --- a/apps/etterlatte-api/.nais/prod-api.yaml +++ b/apps/etterlatte-api/.nais/prod-api.yaml @@ -179,6 +179,7 @@ spec: roles: - les-oms-vedtak - les-bp-vedtak + - opprett-jfr-oppgave outbound: rules: - application: etterlatte-vedtaksvurdering diff --git a/apps/etterlatte-api/README.md b/apps/etterlatte-api/README.md index dd9495a59b7..f2b447e2be1 100644 --- a/apps/etterlatte-api/README.md +++ b/apps/etterlatte-api/README.md @@ -25,11 +25,12 @@ Det må foreligge et tjenestepensjonsforhold og -ytelse i Tjenestepensjonsregist ## API -| Endepunkt | Headers | Body | Responstype | Beskrivelse | -|:-------------------------------|-----------------------------------|----------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------| -| /api/vedtak?fomDato=YYYY-MM-DD | fnr(fases ut, se body)
tpnr | ```{ foedselsnummer: String }``` | Samordningsvedtak[] | Henter ut vedtaksinformasjon for gitt person fra og med gitt dato. | -| /api/vedtak?virkFom=YYYY-MM-DD | fnr(fases ut, se body)
tpnr | ```{ foedselsnummer: String }``` | Samordningsvedtak[] | **DEPRECATED** Henter ut vedtaksinformasjon for gitt person fra og med gitt dato. | -| /api/vedtak/{nav-vedtak-id} | tpnr | | Samordningsvedtak | Henter ut informasjon om et spesifikt vedtak. VedtaksIDen kommer fra samordningskøen hvor det varsles løpende om vedtak som gjøres. | +| Endepunkt | Headers | Body | Responstype | Beskrivelse | +|:-------------------------------|-----------------------------------|-------------------------------------------------------------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| /api/vedtak?fomDato=YYYY-MM-DD | fnr(fases ut, se body)
tpnr | ```{ foedselsnummer: String }``` | Samordningsvedtak[] | Henter ut vedtaksinformasjon for gitt person fra og med gitt dato. | +| /api/vedtak?virkFom=YYYY-MM-DD | fnr(fases ut, se body)
tpnr | ```{ foedselsnummer: String }``` | Samordningsvedtak[] | **DEPRECATED** Henter ut vedtaksinformasjon for gitt person fra og med gitt dato. | +| /api/vedtak/{nav-vedtak-id} | tpnr | | Samordningsvedtak | Henter ut informasjon om et spesifikt vedtak. VedtaksIDen kommer fra samordningskøen hvor det varsles løpende om vedtak som gjøres. | +| /api/v1/oppgave/journalfoering | | ```{ sakId: Long, journalpostId: String, beskrivelse: String }``` | arst | Oppretter journalføringsoppgave i Gjenny | | Header | Beskrivelse | |----------------------------------------|----------------------------------| diff --git a/apps/etterlatte-api/build.gradle.kts b/apps/etterlatte-api/build.gradle.kts index 186267bc35a..e66f083d92f 100644 --- a/apps/etterlatte-api/build.gradle.kts +++ b/apps/etterlatte-api/build.gradle.kts @@ -6,6 +6,7 @@ dependencies { implementation(project(":libs:saksbehandling-common")) implementation(project(":libs:etterlatte-ktor")) implementation(project(":libs:etterlatte-beregning-model")) + implementation(project(":libs:etterlatte-oppgave-model")) implementation(project(":libs:etterlatte-vedtaksvurdering-model")) implementation(project(":libs:etterlatte-sporingslogg")) diff --git a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/Application.kt b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/Application.kt index 123eea725a0..99511024650 100644 --- a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/Application.kt +++ b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/Application.kt @@ -7,6 +7,7 @@ import no.nav.etterlatte.libs.common.appName import no.nav.etterlatte.libs.common.logging.sikkerLoggOppstart import no.nav.etterlatte.libs.ktor.initialisering.initEmbeddedServer import no.nav.etterlatte.libs.ktor.initialisering.run +import no.nav.etterlatte.oppgave.oppgaveRoute import no.nav.etterlatte.samordning.serverRequestLoggerPlugin import no.nav.etterlatte.samordning.userIdMdcPlugin import no.nav.etterlatte.samordning.vedtak.barnepensjonVedtakRoute @@ -47,6 +48,8 @@ class Server( vedtakRoute(vedtakService = applicationContext.vedtakService) + oppgaveRoute(applicationContext.oppgaveService) + install(userIdMdcPlugin) install(serverRequestLoggerPlugin) } diff --git a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/ApplicationContext.kt b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/ApplicationContext.kt index cc7a3e84ff1..660c87adc8f 100644 --- a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/ApplicationContext.kt +++ b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/ApplicationContext.kt @@ -11,6 +11,8 @@ import no.nav.etterlatte.libs.ktor.AzureEnums.AZURE_APP_CLIENT_ID import no.nav.etterlatte.libs.ktor.AzureEnums.AZURE_APP_JWK import no.nav.etterlatte.libs.ktor.AzureEnums.AZURE_APP_WELL_KNOWN_URL import no.nav.etterlatte.libs.ktor.httpClientClientCredentials +import no.nav.etterlatte.oppgave.OppgaveKlient +import no.nav.etterlatte.oppgave.OppgaveService import no.nav.etterlatte.samordning.vedtak.SamordningVedtakService import no.nav.etterlatte.samordning.vedtak.TjenestepensjonKlient import no.nav.etterlatte.samordning.vedtak.VedtaksvurderingSamordningKlient @@ -57,4 +59,7 @@ class ApplicationContext( val behandlingService = BehandlingService(behandlingKlient, vedtaksvurderingSakKlient) val vedtakKlient = VedtaksvurderingKlient(config, vedtaksvurderingHttpClient) val vedtakService = VedtakService(vedtakKlient) + + private val oppgaveKlient = OppgaveKlient(config, behandlingHttpClient) + val oppgaveService = OppgaveService(oppgaveKlient) } diff --git a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveKlient.kt b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveKlient.kt new file mode 100644 index 00000000000..4aa892e56e6 --- /dev/null +++ b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveKlient.kt @@ -0,0 +1,50 @@ +package no.nav.etterlatte.oppgave + +import com.typesafe.config.Config +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.plugins.ClientRequestException +import io.ktor.client.request.accept +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import no.nav.etterlatte.behandling.sak.BehandlingManglendeTilgang +import no.nav.etterlatte.behandling.sak.BehandlingUgyldigForespoersel +import no.nav.etterlatte.libs.common.oppgave.NyOppgaveDto +import no.nav.etterlatte.libs.common.oppgave.OppgaveIntern +import no.nav.etterlatte.libs.common.sak.SakId +import org.slf4j.LoggerFactory + +class OppgaveKlient( + config: Config, + private val httpClient: HttpClient, +) { + private val logger = LoggerFactory.getLogger(this::class.java) + private val behandlingUrl = "${config.getString("behandling.url")}/api" + + suspend fun opprettOppgave( + sakId: SakId, + oppgave: NyOppgaveDto, + ): OppgaveIntern { + logger.info("Oppretter ny oppgave på sak $sakId") + + return try { + httpClient + .post("$behandlingUrl/oppgaver/sak/${sakId.sakId}/opprett") { + accept(ContentType.Application.Json) + contentType(ContentType.Application.Json) + setBody(oppgave) + }.body() + } catch (e: ClientRequestException) { + logger.error("Det oppstod en feil ved opprettelse av oppgave for sak $sakId") + + when (e.response.status) { + HttpStatusCode.Unauthorized -> throw BehandlingManglendeTilgang("Oppgave: Ikke tilgang") + HttpStatusCode.BadRequest -> throw BehandlingUgyldigForespoersel("Oppgave: Ugyldig forespørsel") + else -> throw e + } + } + } +} diff --git a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveRoute.kt b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveRoute.kt new file mode 100644 index 00000000000..821ff1cad2e --- /dev/null +++ b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveRoute.kt @@ -0,0 +1,43 @@ +package no.nav.etterlatte.oppgave + +import io.ktor.server.application.call +import io.ktor.server.application.install +import io.ktor.server.request.receive +import io.ktor.server.routing.Route +import io.ktor.server.routing.post +import io.ktor.server.routing.route +import no.nav.etterlatte.AuthorizationPlugin +import no.nav.etterlatte.libs.common.oppgave.NyOppgaveDto +import no.nav.etterlatte.libs.common.oppgave.OppgaveKilde +import no.nav.etterlatte.libs.common.oppgave.OppgaveType +import no.nav.etterlatte.libs.common.sak.SakId + +fun Route.oppgaveRoute(oppgaveService: OppgaveService) { + route("/api/v1/oppgave") { + route("/journalfoering") { + install(AuthorizationPlugin) { + accessPolicyRolesEllerAdGrupper = setOf("opprett-jfr-oppgave") + } + + post { + val request = call.receive() + + oppgaveService.opprettOppgave( + sakId = request.sakId, + NyOppgaveDto( + oppgaveKilde = OppgaveKilde.EESSI, + oppgaveType = OppgaveType.JOURNALFOERING, + merknad = request.beskrivelse, + referanse = request.journalpostId, + ), + ) + } + } + } +} + +internal data class OpprettJournalfoeringOppgave( + val sakId: SakId, + val journalpostId: String, + val beskrivelse: String, +) diff --git a/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveService.kt b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveService.kt new file mode 100644 index 00000000000..f91d4eac0e8 --- /dev/null +++ b/apps/etterlatte-api/src/main/kotlin/no/nav/etterlatte/oppgave/OppgaveService.kt @@ -0,0 +1,21 @@ +package no.nav.etterlatte.oppgave + +import no.nav.etterlatte.libs.common.oppgave.NyOppgaveDto +import no.nav.etterlatte.libs.common.oppgave.OppgaveIntern +import no.nav.etterlatte.libs.common.sak.SakId +import org.slf4j.LoggerFactory + +class OppgaveService( + private val oppgaveKlient: OppgaveKlient, +) { + private val logger = LoggerFactory.getLogger(this::class.java) + + suspend fun opprettOppgave( + sakId: SakId, + nyOppgave: NyOppgaveDto, + ): OppgaveIntern { + logger.info("Oppretter ny oppgave for sak $sakId") + + return oppgaveKlient.opprettOppgave(sakId, nyOppgave) + } +} diff --git a/apps/etterlatte-saksbehandling-ui/client/src/shared/types/oppgave.ts b/apps/etterlatte-saksbehandling-ui/client/src/shared/types/oppgave.ts index cb14c3e985a..072022cf526 100644 --- a/apps/etterlatte-saksbehandling-ui/client/src/shared/types/oppgave.ts +++ b/apps/etterlatte-saksbehandling-ui/client/src/shared/types/oppgave.ts @@ -65,6 +65,7 @@ export enum OppgaveKilde { DOEDSHENDELSE = 'DOEDSHENDELSE', BEHANDLING = 'BEHANDLING', EKSTERN = 'EKSTERN', + EESSI = 'EESSI', GENERELL_BEHANDLING = 'GENERELL_BEHANDLING', TILBAKEKREVING = 'TILBAKEKREVING', SAKSBEHANDLER = 'SAKSBEHANDLER', diff --git a/libs/etterlatte-oppgave-model/src/main/kotlin/oppgave/OppgaveIntern.kt b/libs/etterlatte-oppgave-model/src/main/kotlin/oppgave/OppgaveIntern.kt index b131f94f0d5..aaacb1ad306 100644 --- a/libs/etterlatte-oppgave-model/src/main/kotlin/oppgave/OppgaveIntern.kt +++ b/libs/etterlatte-oppgave-model/src/main/kotlin/oppgave/OppgaveIntern.kt @@ -97,6 +97,7 @@ enum class OppgaveKilde { BEHANDLING, GENERELL_BEHANDLING, EKSTERN, + EESSI, TILBAKEKREVING, GJENOPPRETTING, SAKSBEHANDLER,