Skip to content

Commit

Permalink
Ta bruk api i etterlatte-api og rename klasser
Browse files Browse the repository at this point in the history
  • Loading branch information
Bjodn committed Jan 16, 2025
1 parent aef4525 commit ed27b38
Show file tree
Hide file tree
Showing 13 changed files with 144 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.etterlatte.samordning.serverRequestLoggerPlugin
import no.nav.etterlatte.samordning.userIdMdcPlugin
import no.nav.etterlatte.samordning.vedtak.barnepensjonVedtakRoute
import no.nav.etterlatte.samordning.vedtak.samordningVedtakRoute
import no.nav.etterlatte.vedtak.vedtakRoute

fun main() {
Server(ApplicationContext(Miljoevariabler.systemEnv())).run()
Expand Down Expand Up @@ -44,6 +45,11 @@ class Server(
config = applicationContext.config,
)

vedtakRoute(
applicationContext.vedtakKlient,
config = applicationContext.config,
)

install(userIdMdcPlugin)
install(serverRequestLoggerPlugin)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import no.nav.etterlatte.libs.ktor.AzureEnums.AZURE_APP_WELL_KNOWN_URL
import no.nav.etterlatte.libs.ktor.httpClientClientCredentials
import no.nav.etterlatte.samordning.vedtak.SamordningVedtakService
import no.nav.etterlatte.samordning.vedtak.TjenestepensjonKlient
import no.nav.etterlatte.samordning.vedtak.VedtaksvurderingKlient
import no.nav.etterlatte.samordning.vedtak.VedtaksvurderingSamordningKlient
import no.nav.etterlatte.vedtak.VedtaksvurderingKlient

class ApplicationContext(
env: Miljoevariabler,
Expand All @@ -28,7 +29,7 @@ class ApplicationContext(
azureAppScope = config.getString("vedtak.outbound"),
)
}
private val vedtaksvurderingKlient = VedtaksvurderingKlient(config, vedtaksvurderingHttpClient)
private val vedtaksvurderingSamordningKlient = VedtaksvurderingSamordningKlient(config, vedtaksvurderingHttpClient)

private val tpHttpClient =
httpClientClientCredentials(
Expand All @@ -39,7 +40,7 @@ class ApplicationContext(
)
private val tpKlient = TjenestepensjonKlient(config, tpHttpClient)

val samordningVedtakService = SamordningVedtakService(vedtaksvurderingKlient, tpKlient)
val samordningVedtakService = SamordningVedtakService(vedtaksvurderingSamordningKlient, tpKlient)

private val behandlingHttpClient =
httpClientClientCredentials(
Expand All @@ -50,4 +51,6 @@ class ApplicationContext(
)
private val behandlingKlient = BehandlingKlient(config, behandlingHttpClient)
val behandlingService = BehandlingService(behandlingKlient)

val vedtakKlient = VedtaksvurderingKlient(config, vedtaksvurderingHttpClient)
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import java.time.LocalDate
import java.time.YearMonth

class SamordningVedtakService(
private val vedtaksvurderingKlient: VedtaksvurderingKlient,
private val vedtaksvurderingKlient: VedtaksvurderingSamordningKlient,
private val tjenestepensjonKlient: TjenestepensjonKlient,
) {
private val logger = LoggerFactory.getLogger(SamordningVedtakService::class.java)
Expand Down Expand Up @@ -49,7 +49,12 @@ class SamordningVedtakService(
fnr: Folkeregisteridentifikator,
context: CallerContext,
): List<SamordningVedtakDto> {
if (context is MaskinportenTpContext && !tjenestepensjonKlient.harTpYtelseOnDate(fnr.value, context.tpnr, fomDato)
if (context is MaskinportenTpContext &&
!tjenestepensjonKlient.harTpYtelseOnDate(
fnr.value,
context.tpnr,
fomDato,
)
) {
logger.info("Avslår forespørsel, manglende/ikke gyldig TP-ytelse")
throw TjenestepensjonManglendeTilgangException("Ikke gyldig tpytelse")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import no.nav.etterlatte.libs.ktor.route.FoedselsnummerDTO
import org.slf4j.LoggerFactory
import java.time.LocalDate

class VedtaksvurderingKlient(
class VedtaksvurderingSamordningKlient(
config: Config,
private val httpClient: HttpClient,
) {
private val logger = LoggerFactory.getLogger(VedtaksvurderingKlient::class.java)
private val logger = LoggerFactory.getLogger(VedtaksvurderingSamordningKlient::class.java)

private val vedtaksvurderingUrl = "${config.getString("vedtak.url")}/api/samordning/vedtak"

Expand All @@ -41,7 +41,10 @@ class VedtaksvurderingKlient(
.get {
url("$vedtaksvurderingUrl/$vedtakId")
if (callerContext is MaskinportenTpContext) {
header("orgnr", callerContext.organisasjonsnr).also { logger.info("Henter vedtak med orgnr $it") }
header(
"orgnr",
callerContext.organisasjonsnr,
).also { logger.info("Henter vedtak med orgnr $it") }
}
}.body()
} catch (e: ClientRequestException) {
Expand All @@ -68,7 +71,10 @@ class VedtaksvurderingKlient(
parameter("sakstype", sakType)
parameter("fomDato", fomDato)
if (callerContext is MaskinportenTpContext) {
header("orgnr", callerContext.organisasjonsnr).also { logger.info("Henter vedtaksliste med orgnr $it") }
header(
"orgnr",
callerContext.organisasjonsnr,
).also { logger.info("Henter vedtaksliste med orgnr $it") }
}
contentType(ContentType.Application.Json)
setBody(FoedselsnummerDTO(fnr))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package no.nav.etterlatte.vedtak

import com.typesafe.config.Config
import io.ktor.http.HttpStatusCode
import io.ktor.server.application.call
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.response.respondNullable
import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.etterlatte.libs.common.vedtak.VedtakForPersonRequest

fun Route.vedtakRoute(
vedtaksvurderingKlient: VedtaksvurderingKlient,
config: Config,
) {
// Tiltenkt for eksternt for etterlatte men internt i Nav. Initelt gjelder dette EESSI.
route("api/vedtak/personident") {
post {
// TODO mer autentisering?
try {
val request = call.receive<VedtakForPersonRequest>()
val vedtak = vedtaksvurderingKlient.hentVedtak(request)
call.respond(vedtak)
} catch (e: IllegalArgumentException) {
call.respondNullable(HttpStatusCode.BadRequest, e.message)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package no.nav.etterlatte.vedtak

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.post
import io.ktor.client.request.setBody
import io.ktor.client.request.url
import io.ktor.http.HttpStatusCode
import no.nav.etterlatte.libs.common.logging.sikkerlogger
import no.nav.etterlatte.libs.common.vedtak.VedtakForEksterntDto
import no.nav.etterlatte.libs.common.vedtak.VedtakForPersonRequest
import no.nav.etterlatte.samordning.vedtak.VedtakvurderingIkkeFunnetException
import no.nav.etterlatte.samordning.vedtak.VedtakvurderingManglendeTilgangException
import no.nav.etterlatte.samordning.vedtak.VedtakvurderingUgyldigForesporselException
import org.slf4j.LoggerFactory

class VedtaksvurderingKlient(
config: Config,
private val httpClient: HttpClient,
) {
private val logger = LoggerFactory.getLogger(VedtaksvurderingKlient::class.java)

private val vedtaksvurderingUrl = "${config.getString("vedtak.url")}/api/vedtak/for/eksternt"

suspend fun hentVedtak(request: VedtakForPersonRequest): VedtakForEksterntDto {
sikkerlogger().info("Henter vedtak med fnr=${request.fnr}")

return try {
httpClient
.post {
url(vedtaksvurderingUrl)
setBody(request)
}.body()
} catch (e: ClientRequestException) {
logger.error("Det oppstod feil i kall til vedtak API", e)
when (e.response.status) {
HttpStatusCode.Unauthorized -> throw VedtakvurderingManglendeTilgangException("Vedtak: Ikke tilgang")
HttpStatusCode.BadRequest -> throw VedtakvurderingUgyldigForesporselException("Vedtak: Ugyldig forespørsel")
HttpStatusCode.NotFound -> throw VedtakvurderingIkkeFunnetException("Vedtak: Ressurs ikke funnet")
else -> throw e
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const val FNR = "10518209200"
const val TPNR_SPK = "3010"

class SamordningVedtakServiceTest {
private val vedtakKlient = mockk<VedtaksvurderingKlient>()
private val vedtakKlient = mockk<VedtaksvurderingSamordningKlient>()
private val tpKlient = mockk<TjenestepensjonKlient>()
private val samordningVedtakService = SamordningVedtakService(vedtakKlient, tpKlient)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class VedtakvurderingKlientTest {
else -> error("Unhandled ${request.url.fullPath}")
}
}
val vedtaksvurderingKlient = VedtaksvurderingKlient(config, client)
val vedtaksvurderingKlient = VedtaksvurderingSamordningKlient(config, client)
runBlocking {
vedtaksvurderingKlient.hentVedtak(vedtakId, MaskinportenTpContext(Tjenestepensjonnummer(""), "orgnr"))
}
Expand Down Expand Up @@ -71,7 +71,7 @@ class VedtakvurderingKlientTest {
}
}

val vedtaksvurderingKlient = VedtaksvurderingKlient(config, client)
val vedtaksvurderingKlient = VedtaksvurderingSamordningKlient(config, client)

runBlocking {
vedtaksvurderingKlient.hentVedtaksliste(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import no.nav.etterlatte.vedtaksvurdering.config.ApplicationContext
import no.nav.etterlatte.vedtaksvurdering.klagevedtakRoute
import no.nav.etterlatte.vedtaksvurdering.samordningSystembrukerVedtakRoute
import no.nav.etterlatte.vedtaksvurdering.tilbakekrevingvedtakRoute
import no.nav.etterlatte.vedtaksvurdering.vedtakForEksternt
import no.nav.etterlatte.vedtaksvurdering.vedtaksvurderingRoute

fun main() {
Expand Down Expand Up @@ -41,6 +42,7 @@ class Server(
)
automatiskBehandlingRoutes(automatiskBehandlingService, behandlingKlient)
samordningSystembrukerVedtakRoute(vedtakSamordningService)
vedtakForEksternt(vedtakForEksterntService)
tilbakekrevingvedtakRoute(vedtakTilbakekrevingService, behandlingKlient)
klagevedtakRoute(vedtakKlageService, behandlingKlient)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
package no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering

import no.nav.etterlatte.libs.common.person.Folkeregisteridentifikator
import no.nav.etterlatte.libs.common.vedtak.VedtakOffentlig
import no.nav.etterlatte.libs.common.vedtak.VedtakOffentligDto
import no.nav.etterlatte.libs.common.vedtak.VedtakOffentligUtbetalingDto
import no.nav.etterlatte.libs.common.vedtak.VedtakForEkstern
import no.nav.etterlatte.libs.common.vedtak.VedtakForEksternUtbetaling
import no.nav.etterlatte.libs.common.vedtak.VedtakForEksterntDto
import no.nav.etterlatte.libs.common.vedtak.VedtakTypeForEkstern
import no.nav.etterlatte.vedtaksvurdering.VedtakInnhold
import no.nav.etterlatte.vedtaksvurdering.VedtaksvurderingRepository

class OffentligVedtakService(
class VedtakForEksterntService(
private val repository: VedtaksvurderingRepository,
) {
fun hentVedtak(fnr: String): VedtakOffentligDto {
fun hentVedtak(fnr: String): VedtakForEksterntDto {
val folkeregisteridentifikator = Folkeregisteridentifikator.of(fnr)
val vedtak = repository.hentFerdigstilteVedtak(folkeregisteridentifikator)

// TODO må noe mer filtreres?

return VedtakOffentligDto(
return VedtakForEksterntDto(
vedtak =
vedtak.map {
// TODO kun behandlignsvedtak?
vedtak.filter { it.type.vanligBehandling }.map {
val vedtakInnhold = (it.innhold as VedtakInnhold.Behandling)
VedtakOffentlig(
VedtakForEkstern(
virkningstidspunkt = vedtakInnhold.virkningstidspunkt,
type = it.type,
type = VedtakTypeForEkstern.valueOf(it.type.name),
utbetaling =
vedtakInnhold.utbetalingsperioder.map { utbetaling ->
VedtakOffentligUtbetalingDto(
VedtakForEksternUtbetaling(
periode = utbetaling.periode,
beloep = utbetaling.beloep,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import no.nav.etterlatte.libs.common.person.Folkeregisteridentifikator
import no.nav.etterlatte.libs.common.tidspunkt.toNorskTid
import no.nav.etterlatte.libs.common.vedtak.AttesterVedtakDto
import no.nav.etterlatte.libs.common.vedtak.LoependeYtelseDTO
import no.nav.etterlatte.libs.common.vedtak.OffentligVedtakRequest
import no.nav.etterlatte.libs.common.vedtak.TilbakekrevingFattEllerAttesterVedtakDto
import no.nav.etterlatte.libs.common.vedtak.TilbakekrevingVedtakDto
import no.nav.etterlatte.libs.common.vedtak.VedtakForPersonRequest
import no.nav.etterlatte.libs.common.vedtak.VedtakKafkaHendelseHendelseType
import no.nav.etterlatte.libs.common.vedtak.VedtakSammendragDto
import no.nav.etterlatte.libs.ktor.route.BEHANDLINGID_CALL_PARAMETER
Expand All @@ -31,7 +31,7 @@ import no.nav.etterlatte.libs.ktor.route.behandlingId
import no.nav.etterlatte.libs.ktor.route.withBehandlingId
import no.nav.etterlatte.libs.ktor.route.withSakId
import no.nav.etterlatte.libs.ktor.token.brukerTokenInfo
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.OffentligVedtakService
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.VedtakForEksterntService
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.VedtakKlageService
import no.nav.etterlatte.vedtaksvurdering.klienter.BehandlingKlient
import org.slf4j.LoggerFactory
Expand Down Expand Up @@ -310,11 +310,11 @@ fun Route.samordningSystembrukerVedtakRoute(vedtakSamordningService: VedtakSamor
}
}

fun Route.offentligVedtakInfo(offentligVedtakService: OffentligVedtakService) {
route("/api/offentlig/vedtak") {
fun Route.vedtakForEksternt(vedtakForEksterntService: VedtakForEksterntService) {
route("/api/vedtak/for/eksternt") {
post {
val request = call.receive<OffentligVedtakRequest>()
val vedtak = offentligVedtakService.hentVedtak(request.fnr)
val request = call.receive<VedtakForPersonRequest>()
val vedtak = vedtakForEksterntService.hentVedtak(request.fnr)
call.respond(vedtak)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import no.nav.etterlatte.libs.ktor.AppConfig.ELECTOR_PATH
import no.nav.etterlatte.libs.ktor.httpClient
import no.nav.etterlatte.libs.ktor.httpClientClientCredentials
import no.nav.etterlatte.libs.ktor.route.logger
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.VedtakForEksterntService
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.VedtakKlageService
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.metrics.VedtakMetrics
import no.nav.etterlatte.no.nav.etterlatte.vedtaksvurdering.metrics.VedtakMetrikkerDao
Expand Down Expand Up @@ -100,6 +101,7 @@ class ApplicationContext {
VedtakSamordningService(
repository = VedtaksvurderingRepository(dataSource),
)
val vedtakForEksterntService = VedtakForEksterntService(VedtaksvurderingRepository(dataSource))
val automatiskBehandlingService =
AutomatiskBehandlingService(
vedtakBehandlingService,
Expand Down
27 changes: 14 additions & 13 deletions libs/etterlatte-vedtaksvurdering-model/src/main/kotlin/VedtakDto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -173,27 +173,28 @@ data class TilbakekrevingVedtakLagretDto(
val dato: LocalDate,
)

// TODO kun EESSI eller generelt?
data class OffentligVedtakRequest(
data class VedtakForPersonRequest(
val fnr: String,
)

data class VedtakOffentligDto(
val vedtak: List<VedtakOffentlig>,
data class VedtakForEksterntDto(
val vedtak: List<VedtakForEkstern>,
)

data class VedtakOffentlig(
data class VedtakForEkstern(
val virkningstidspunkt: YearMonth,
// TODO kun ytelsesvedtak? Ikke klage, tilvakekreving, etc?
// TODO Endringer?
val type: VedtakType,
// TODO beløp - periodisert?
val utbetaling: List<VedtakOffentligUtbetalingDto>,
val type: VedtakTypeForEkstern,
val utbetaling: List<VedtakForEksternUtbetaling>,
)

data class VedtakOffentligUtbetalingDto(
enum class VedtakTypeForEkstern {
INNVILGELSE,
OPPHOER,
AVSLAG,
ENDRING,
}

data class VedtakForEksternUtbetaling(
val periode: Periode,
val beloep: BigDecimal?,
// val type: UtbetalingsperiodeType, TODO
// val regelverk: Regelverk?,
)

0 comments on commit ed27b38

Please sign in to comment.