Skip to content

Commit

Permalink
EY-4770 Opprette omregningskjøring for automatisk behandling (#6430)
Browse files Browse the repository at this point in the history
* Opprette omregningskjøring for automatisk behandling

* rettet test som feilet

* rettet etter tilbakemeldinger

* rettet etter tilbakemeldinger

* rettet etter tilbakemeldinger

* rette byggefeil

* la til tester

* rettet tilbakemeldinger

* rettet tilbakemeldinger
  • Loading branch information
andreasbalevik authored Nov 26, 2024
1 parent b4ae1d9 commit 3261132
Show file tree
Hide file tree
Showing 14 changed files with 325 additions and 57 deletions.
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("Årlig 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
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,117 @@
package no.nav.etterlatte.inntektsjustering.selvbetjening

import no.nav.etterlatte.funksjonsbrytere.FeatureToggle
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
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
}

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
Expand Up @@ -183,7 +183,7 @@ class AarligInntektsjusteringJobbServiceTest {

val exception =
assertThrows<UgyldigForespoerselException> {
service.opprettManuellInntektsjustering(sakId, oppgaveId, mockk())
service.opprettRevurderingForAarligInntektsjustering(sakId, oppgaveId, mockk())
}
exception.code shouldBe "KAN_IKKE_OPPRETTE_REVURDERING_PGA_AAPNE_BEHANDLINGER"
}
Expand All @@ -198,7 +198,7 @@ class AarligInntektsjusteringJobbServiceTest {

coEvery { oppgaveService.ferdigstillOppgave(oppgaveId, any()) } returns mockk()
coEvery { oppgaveService.hentOppgave(oppgaveId) } returns oppgave
val revurdering = service.opprettManuellInntektsjustering(sakId, oppgaveId, mockk())
val revurdering = service.opprettRevurderingForAarligInntektsjustering(sakId, oppgaveId, mockk())
verify {
revurderingService.opprettRevurdering(
sakId = sakId,
Expand Down Expand Up @@ -236,7 +236,7 @@ class AarligInntektsjusteringJobbServiceTest {
)

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -277,7 +277,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -321,7 +321,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -357,7 +357,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { oppgaveService.opprettOppgave(any(), any(), any(), any(), any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

// TODO verifer opprettelse rev
Expand Down Expand Up @@ -391,7 +391,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { oppgaveService.opprettOppgave(any(), any(), any(), any(), any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

// TODO verifer opprettelse rev
Expand Down Expand Up @@ -436,7 +436,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -468,7 +468,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -505,7 +505,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -536,7 +536,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

verify {
Expand Down Expand Up @@ -576,7 +576,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

// TODO verifer opprettelse rev
Expand Down Expand Up @@ -640,7 +640,7 @@ class AarligInntektsjusteringJobbServiceTest {
every { omregningService.oppdaterKjoering(any()) } returns mockk()

runBlocking {
service.startAarligInntektsjustering(request)
service.startAarligInntektsjusteringJobb(request)
}

// TODO verifer opprettelse rev
Expand Down
Loading

0 comments on commit 3261132

Please sign in to comment.