Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EY-4770 Opprette omregningskjøring for automatisk behandling #6430

Merged
merged 9 commits into from
Nov 26, 2024
2 changes: 2 additions & 0 deletions apps/etterlatte-behandling/src/main/kotlin/Application.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import no.nav.etterlatte.egenansatt.egenAnsattRoute
import no.nav.etterlatte.grunnlagsendring.doedshendelse.doedshendelseRoute
import no.nav.etterlatte.grunnlagsendring.grunnlagsendringshendelseRoute
import no.nav.etterlatte.inntektsjustering.aarligInntektsjusteringRoute
import no.nav.etterlatte.inntektsjustering.selvbetjening.inntektsjusteringSelvbetjeningRoute
import no.nav.etterlatte.institusjonsopphold.InstitusjonsoppholdService
import no.nav.etterlatte.institusjonsopphold.institusjonsoppholdRoute
import no.nav.etterlatte.kodeverk.kodeverk
Expand Down Expand Up @@ -189,6 +190,7 @@ private fun Route.settOppRoutes(applicationContext: ApplicationContext) {
)
omregningRoutes(omregningService = applicationContext.omregningService)
aarligInntektsjusteringRoute(service = applicationContext.aarligInntektsjusteringJobbService)
inntektsjusteringSelvbetjeningRoute(service = applicationContext.inntektsjusteringSelvbetjeningService)
migreringRoutes(migreringService = applicationContext.migreringService)
bosattUtlandRoutes(bosattUtlandService = applicationContext.bosattUtlandService)
behandlingsstatusRoutes(behandlingsstatusService = applicationContext.behandlingsStatusService)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ internal fun Route.revurderingRoutes(

post("manuell-inntektsjustering") {
kunSaksbehandlerMedSkrivetilgang { saksbehandler ->
logger.info("Oppretter ny revurdering for årlig inntektsjustering på sak $sakId")
logger.info("Oppretter ny revurdering for årlig manuell inntektsjustering på sak $sakId")
medBody<OpprettManuellInntektsjustering> {
val revurdering =
inTransaction {
aarligInntektsjusteringJobbService.opprettManuellInntektsjustering(
aarligInntektsjusteringJobbService.opprettRevurderingForAarligInntektsjustering(
sakId,
it.oppgaveId,
saksbehandler,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ import no.nav.etterlatte.grunnlagsendring.doedshendelse.DoedshendelseService
import no.nav.etterlatte.grunnlagsendring.doedshendelse.DoedshendelserKafkaServiceImpl
import no.nav.etterlatte.grunnlagsendring.doedshendelse.kontrollpunkt.DoedshendelseKontrollpunktService
import no.nav.etterlatte.inntektsjustering.AarligInntektsjusteringJobbService
import no.nav.etterlatte.inntektsjustering.selvbetjening.InntektsjusteringSelvbetjeningService
import no.nav.etterlatte.institusjonsopphold.InstitusjonsoppholdDao
import no.nav.etterlatte.jobs.MetrikkerJob
import no.nav.etterlatte.kafka.GcpKafkaConfig
Expand Down Expand Up @@ -471,6 +472,13 @@ internal class ApplicationContext(
)
val doedshendelseService = DoedshendelseService(doedshendelseDao, pdlTjenesterKlient)

val inntektsjusteringSelvbetjeningService =
InntektsjusteringSelvbetjeningService(
oppgaveService = oppgaveService,
rapid = rapid,
featureToggleService = featureToggleService,
)

val aarligInntektsjusteringJobbService =
AarligInntektsjusteringJobbService(
omregningService = omregningService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import no.nav.etterlatte.libs.common.inntektsjustering.AarligInntektsjusteringRe

internal fun Route.aarligInntektsjusteringRoute(service: AarligInntektsjusteringJobbService) {
route("/inntektsjustering") {
post("jobb") {
post("aarlig-jobb") {
val request = call.receive<AarligInntektsjusteringRequest>()
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
call.respond(HttpStatusCode.OK)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.etterlatte.behandling.domain.Behandling
import no.nav.etterlatte.behandling.domain.Revurdering
import no.nav.etterlatte.behandling.klienter.BeregningKlient
import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.behandling.omregning.OmregningKlassifikasjonskodeJobService.Companion.kjoering
import no.nav.etterlatte.behandling.omregning.OmregningService
import no.nav.etterlatte.behandling.revurdering.RevurderingService
import no.nav.etterlatte.common.klienter.PdlTjenesterKlient
Expand Down Expand Up @@ -76,13 +77,15 @@ class AarligInntektsjusteringJobbService(
) {
private val logger = LoggerFactory.getLogger(this::class.java)

fun startAarligInntektsjustering(request: AarligInntektsjusteringRequest) {
fun startAarligInntektsjusteringJobb(request: AarligInntektsjusteringRequest) {
logger.info("Starter årlig inntektsjusteringjobb $kjoering")
request.saker.forEach { sakId ->
startEnkeltSak(request.kjoering, request.loependeFom, sakId)
}
}

fun opprettManuellInntektsjustering(
// i det tilfelle hvor aarligInntektsjusteringJobb ikka kan behandle sak atuomatisk,
fun opprettRevurderingForAarligInntektsjustering(
sakId: SakId,
oppgaveId: UUID,
saksbehandler: Saksbehandler,
Expand All @@ -100,7 +103,9 @@ class AarligInntektsjusteringJobbService(
val begrunnelse = oppgaveService.hentOppgave(oppgaveId).merknad
val loependeFom = AarligInntektsjusteringRequest.utledLoependeFom()
val revurdering = nyManuellRevurdering(sakId, hentForrigeBehandling(sakId), loependeFom, begrunnelse!!)

oppgaveService.ferdigstillOppgave(oppgaveId, saksbehandler)

return revurdering
}

Expand All @@ -109,7 +114,7 @@ class AarligInntektsjusteringJobbService(
loependeFom: YearMonth,
sakId: SakId,
) = inTransaction {
logger.info("Årlig inntektsjusteringsjobb $kjoering for $sakId")
logger.info("Inntektsjusteringsjobb $kjoering for sak $sakId")
try {
val vedtak =
runBlocking {
Expand All @@ -122,7 +127,6 @@ class AarligInntektsjusteringJobbService(
}

val forrigeBehandling = hentForrigeBehandling(sakId)

val avkortingSjekk = hentAvkortingSjekk(sakId, loependeFom, forrigeBehandling.id)

if (avkortingSjekk.harInntektForAar) {
Expand Down Expand Up @@ -152,7 +156,7 @@ class AarligInntektsjusteringJobbService(
}
}

fun maaGjoeresManuelt(
private fun maaGjoeresManuelt(
kjoering: String,
sakId: SakId,
loependeFom: YearMonth,
Expand Down Expand Up @@ -209,7 +213,6 @@ class AarligInntektsjusteringJobbService(
}

val opplysningerGjenny = hentOpplysningerGjenny(sak, forrigeBehandling.id)

val opplysningerPdl = hentPdlPersonopplysning(sak)

if (!opplysningerPdl.vergemaalEllerFremtidsfullmakt.isNullOrEmpty()) {
Expand Down Expand Up @@ -370,7 +373,7 @@ class AarligInntektsjusteringJobbService(
OmregningData(
kjoering = kjoering,
sakId = sakId,
revurderingaarsak = Revurderingaarsak.AARLIG_INNTEKTSJUSTERING,
revurderingaarsak = Revurderingaarsak.INNTEKTSENDRING,
fradato = loependeFom.atDay(1),
).toPacket(),
),
Expand Down Expand Up @@ -463,3 +466,12 @@ enum class ManuellBehandlingToggle(

override fun key(): String = this.value
}

enum class InntektsjusterinFeatureToggle(
private val key: String,
) : FeatureToggle {
AUTOMATISK_BEHANDLE("inntektsjustering-automatisk-behandle"),
;

override fun key() = key
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package no.nav.etterlatte.inntektsjustering.selvbetjening

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.routing.Route
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.etterlatte.libs.common.inntektsjustering.InntektsjusteringRequest

internal fun Route.inntektsjusteringSelvbetjeningRoute(service: InntektsjusteringSelvbetjeningService) {
route("/inntektsjustering") {
post("behandle") {
val request = call.receive<InntektsjusteringRequest>()
service.behandleInntektsjustering(request)
call.respond(HttpStatusCode.OK)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package no.nav.etterlatte.inntektsjustering.selvbetjening

import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.inntektsjustering.InntektsjusterinFeatureToggle
import no.nav.etterlatte.kafka.JsonMessage
import no.nav.etterlatte.kafka.KafkaProdusent
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.inntektsjustering.InntektsjusteringRequest
import no.nav.etterlatte.libs.common.logging.getCorrelationId
import no.nav.etterlatte.libs.common.oppgave.OppgaveKilde
import no.nav.etterlatte.libs.common.oppgave.OppgaveType
import no.nav.etterlatte.libs.common.rapidsandrivers.CORRELATION_ID_KEY
import no.nav.etterlatte.libs.common.rapidsandrivers.TEKNISK_TID_KEY
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.tidspunkt.Tidspunkt
import no.nav.etterlatte.oppgave.OppgaveService
import no.nav.etterlatte.rapidsandrivers.OmregningData
import no.nav.etterlatte.rapidsandrivers.OmregningDataPacket
import no.nav.etterlatte.rapidsandrivers.OmregningHendelseType
import org.slf4j.LoggerFactory
import java.time.YearMonth

class InntektsjusteringSelvbetjeningService(
private val oppgaveService: OppgaveService,
private val rapid: KafkaProdusent<String, String>,
private val featureToggleService: FeatureToggleService,
) {
private val logger = LoggerFactory.getLogger(this::class.java)

fun behandleInntektsjustering(request: InntektsjusteringRequest) {
logger.info("Starter behandling av innmeldt inntektsjustering for sak ${request.sak.sakId}")

if (skalGjoeresAutomatisk()) {
startAutomatiskBehandling(
request,
SakId(request.sak.sakId),
)
} else {
startManuellBehandling(request)
}
}

private fun startAutomatiskBehandling(
request: InntektsjusteringRequest,
sakId: SakId,
) {
logger.info("Behandles automatisk: starter omregning for sak ${request.sak.sakId}")
publiserKlarForOmregning(
sakId,
InntektsjusteringRequest.utledLoependeFom(),
InntektsjusteringRequest.utledKjoering(request.inntektsjusteringId),
)
}

private fun startManuellBehandling(request: InntektsjusteringRequest) {
logger.info("Behandles manuelt: oppretter oppgave for mottatt inntektsjustering for sak ${request.sak.sakId}")
oppgaveService.opprettOppgave(
sakId = SakId(request.sak.sakId),
kilde = OppgaveKilde.BRUKERDIALOG,
type = OppgaveType.MOTTATT_INNTEKTSJUSTERING,
merknad = "Mottatt inntektsjustering",
referanse = request.journalpostId,
)
}

private fun publiserKlarForOmregning(
sakId: SakId,
loependeFom: YearMonth,
kjoering: String,
) {
val correlationId = getCorrelationId()
rapid
.publiser(
"inntektsjustering-$sakId",
JsonMessage
.newMessage(
OmregningHendelseType.KLAR_FOR_OMREGNING.lagEventnameForType(),
mapOf(
CORRELATION_ID_KEY to correlationId,
TEKNISK_TID_KEY to Tidspunkt.now(),
OmregningDataPacket.KEY to
OmregningData(
kjoering = kjoering,
sakId = sakId,
revurderingaarsak = Revurderingaarsak.INNTEKTSENDRING,
fradato = loependeFom.atDay(1),
).toPacket(),
),
).toJson(),
).also { (partition, offset) ->
logger.info(
"Publiserte klar for omregningshendelse for $sakId på partition " +
"$partition, offset $offset, correlationid: $correlationId",
)
}
}

private fun skalGjoeresAutomatisk(): Boolean {
val featureToggle =
featureToggleService.isEnabled(
InntektsjusterinFeatureToggle.AUTOMATISK_BEHANDLE,
false,
)

// TODO: sjekke om riktig tilstand for automatisk behandling
return featureToggle
}
}
Loading