Skip to content

Commit

Permalink
Inntektsjobb oppstart (#6336)
Browse files Browse the repository at this point in the history
* Opprettelse av manuell behandling eller oppgaver styres med bryter

* Lager tjenete i tidshendelser for årlig inntektsjustering

* Egen status for manuell uten oppgave
  • Loading branch information
Bjodn authored Nov 15, 2024
1 parent cc3266b commit ac371cb
Show file tree
Hide file tree
Showing 10 changed files with 121 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ internal class ApplicationContext(
pdlTjenesterKlient = pdlTjenesterKlient,
oppgaveService = oppgaveService,
rapid = rapid,
featureToggleService = featureToggleService,
)

val grunnlagsendringsHendelseFilter = GrunnlagsendringsHendelseFilter(vedtakKlient, behandlingService)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.behandling.omregning.OmregningService
import no.nav.etterlatte.behandling.revurdering.RevurderingService
import no.nav.etterlatte.common.klienter.PdlTjenesterKlient
import no.nav.etterlatte.funksjonsbrytere.FeatureToggle
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.grunnlag.Personopplysning
import no.nav.etterlatte.inTransaction
import no.nav.etterlatte.inntektsjustering.AarligInntektsjusteringAarsakManuell.AAPEN_BEHANDLING
Expand Down Expand Up @@ -66,6 +68,7 @@ class AarligInntektsjusteringJobbService(
private val pdlTjenesterKlient: PdlTjenesterKlient,
private val oppgaveService: OppgaveService,
private val rapid: KafkaProdusent<String, String>,
private val featureToggleService: FeatureToggleService,
) {
private val logger = LoggerFactory.getLogger(this::class.java)

Expand Down Expand Up @@ -220,6 +223,15 @@ class AarligInntektsjusteringJobbService(
kjoering: String,
aarsakTilManuell: AarligInntektsjusteringAarsakManuell,
) {
if (!manuellBehandlingSkruddPaa()) {
oppdaterKjoering(
kjoering,
KjoeringStatus.TIL_MANUELL_UTEN_OPPGAVE,
sakId,
aarsakTilManuell.name,
)
return
}
oppgaveService.opprettOppgave(
referanse = forrigeBehandlingId.toString(),
sakId = sakId,
Expand All @@ -242,6 +254,15 @@ class AarligInntektsjusteringJobbService(
kjoering: String,
aarsakTilManuell: AarligInntektsjusteringAarsakManuell,
) {
if (!manuellBehandlingSkruddPaa()) {
oppdaterKjoering(
kjoering,
KjoeringStatus.TIL_MANUELL_UTEN_OPPGAVE,
sakId,
aarsakTilManuell.name,
)
return
}
nyManuellRevurdering(sakId, forrigeBehandling, loependeFom)
oppdaterKjoering(
kjoering,
Expand Down Expand Up @@ -359,6 +380,9 @@ class AarligInntektsjusteringJobbService(
HardkodaSystembruker.omregning,
).innsender ?: throw InternfeilException("Fant ikke opplysninger for behandling=$sisteBehandlingId")
}

private fun manuellBehandlingSkruddPaa(): Boolean =
featureToggleService.isEnabled(ManuellBehandlingToggle.MANUELL_BEHANDLING, defaultValue = false)
}

enum class AarligInntektsjusteringAarsakManuell {
Expand All @@ -369,3 +393,12 @@ enum class AarligInntektsjusteringAarsakManuell {
AAPEN_BEHANDLING,
HAR_SANKSJON,
}

enum class ManuellBehandlingToggle(
val value: String,
) : FeatureToggle {
MANUELL_BEHANDLING("aarlig-inntektsjustering-la-manuell-behandling"),
;

override fun key(): String = this.value
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import no.nav.etterlatte.behandling.klienter.VedtakKlient
import no.nav.etterlatte.behandling.omregning.OmregningService
import no.nav.etterlatte.behandling.revurdering.RevurderingService
import no.nav.etterlatte.common.klienter.PdlTjenesterKlient
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.kafka.KafkaProdusent
import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.behandling.Persongalleri
Expand Down Expand Up @@ -62,6 +63,7 @@ class AarligInntektsjusteringJobbServiceTest {
private val pdlTjenesterKlient: PdlTjenesterKlient = mockk()
private val oppgaveService: OppgaveService = mockk()
private val rapid: KafkaProdusent<String, String> = mockk()
private val featureToggleService: FeatureToggleService = mockk()

val service =
AarligInntektsjusteringJobbService(
Expand All @@ -75,6 +77,7 @@ class AarligInntektsjusteringJobbServiceTest {
pdlTjenesterKlient,
oppgaveService,
rapid,
featureToggleService,
)

@BeforeAll
Expand All @@ -85,6 +88,7 @@ class AarligInntektsjusteringJobbServiceTest {
@BeforeEach
fun beforeEach() {
clearAllMocks()
every { featureToggleService.isEnabled(any(), any()) } returns true

coEvery { vedtakKlient.sakHarLopendeVedtakPaaDato(any(), any(), any()) } returns loependeYtdelseDto()
coEvery {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import no.nav.etterlatte.tidshendelser.TidshendelserKey.JOBB_POLLER_OPENING_HOUR
import no.nav.etterlatte.tidshendelser.TidshendelserKey.OPPRETT_JOBBER_INITIAL_DELAY
import no.nav.etterlatte.tidshendelser.TidshendelserKey.OPPRETT_JOBBER_INTERVAL
import no.nav.etterlatte.tidshendelser.TidshendelserKey.OPPRETT_JOBBER_OPENING_HOURS
import no.nav.etterlatte.tidshendelser.aarliginntektsjustering.AarligInntektsjusteringService
import no.nav.etterlatte.tidshendelser.klient.BehandlingKlient
import no.nav.etterlatte.tidshendelser.klient.GrunnlagKlient
import no.nav.etterlatte.tidshendelser.regulering.ReguleringDao
Expand Down Expand Up @@ -72,13 +73,21 @@ class AppContext(
private val omstillingsstoenadService = OmstillingsstoenadService(hendelseDao, grunnlagKlient, behandlingKlient)
private val reguleringDao = ReguleringDao(dataSource)
private val reguleringService = ReguleringService(publisher, reguleringDao)
private val inntektsjusteringService = AarligInntektsjusteringService(publisher, reguleringDao)

val jobbPollerTask =
JobbPollerTask(
initialDelaySeconds = env.requireEnvValue(JOBB_POLLER_INITIAL_DELAY).toLong(),
periode = env.requireEnvValue(JOBB_POLLER_INTERVAL).let { Duration.parse(it) } ?: Duration.ofMinutes(5),
openingHours = env.requireEnvValue(JOBB_POLLER_OPENING_HOURS).let { OpeningHours.of(it) },
jobbPoller = JobbPoller(hendelseDao, aldersovergangerService, omstillingsstoenadService, reguleringService),
jobbPoller =
JobbPoller(
hendelseDao,
aldersovergangerService,
omstillingsstoenadService,
reguleringService,
inntektsjusteringService,
),
)

val opprettJobberTask =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.etterlatte.jobs.fixedRateCancellableTimer
import no.nav.etterlatte.libs.common.OpeningHours
import no.nav.etterlatte.libs.common.TimerJob
import no.nav.etterlatte.libs.tidshendelser.JobbKategori
import no.nav.etterlatte.tidshendelser.aarliginntektsjustering.AarligInntektsjusteringService
import no.nav.etterlatte.tidshendelser.regulering.ReguleringService
import org.slf4j.LoggerFactory
import java.time.Duration
Expand Down Expand Up @@ -38,6 +39,7 @@ class JobbPoller(
private val aldersovergangerService: AldersovergangerService,
private val omstillingsstoenadService: OmstillingsstoenadService,
private val reguleringService: ReguleringService,
private val inntektsjusteringService: AarligInntektsjusteringService,
) {
private val logger = LoggerFactory.getLogger(JobbPoller::class.java)

Expand All @@ -54,6 +56,7 @@ class JobbPoller(
JobbKategori.ALDERSOVERGANG -> aldersovergangerService.execute(it)
JobbKategori.OMS_DOEDSDATO -> omstillingsstoenadService.execute(it)
JobbKategori.REGULERING -> reguleringService.execute(it)
JobbKategori.AARLIG_INNTEKTSJUSTERING -> inntektsjusteringService.execute(it)
}

if (saker.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package no.nav.etterlatte.tidshendelser.aarliginntektsjustering

import no.nav.etterlatte.libs.common.inntektsjustering.AarligInntektsjusteringRequest
import no.nav.etterlatte.libs.common.rapidsandrivers.lagParMedEventNameKey
import no.nav.etterlatte.rapidsandrivers.InntektsjusteringHendelseType
import no.nav.etterlatte.rapidsandrivers.RapidEvents
import no.nav.etterlatte.rapidsandrivers.ReguleringEvents
import no.nav.etterlatte.rapidsandrivers.tilSeparertString
import no.nav.etterlatte.tidshendelser.HendelserJobb
import no.nav.etterlatte.tidshendelser.regulering.ReguleringDao
import no.nav.etterlatte.tidshendelser.regulering.Reguleringskonfigurasjon
import no.nav.helse.rapids_rivers.JsonMessage
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.util.UUID

class AarligInntektsjusteringService(
private val rapidsPublisher: (UUID, String) -> Unit,
private val reguleringDao: ReguleringDao,
) {
val logger: Logger = LoggerFactory.getLogger(this::class.java)

fun execute(jobb: HendelserJobb): List<Long> {
logger.info("Handling jobb ${jobb.id}, type ${jobb.type} (${jobb.type.beskrivelse})")
val konfigurasjon = reguleringDao.hentNyesteKonfigurasjon()
startAarligInntektsjustering(konfigurasjon)
return listOf()
}

private fun startAarligInntektsjustering(konfigurasjon: Reguleringskonfigurasjon) {
logger.info("StartInntektsJob startet")
rapidsPublisher(
UUID.randomUUID(),
createRecord(konfigurasjon),
)
logger.info("StartInntektsJob ferdig")
}
}

fun createRecord(konfigurasjon: Reguleringskonfigurasjon) =
JsonMessage
.newMessage(
mapOf(
InntektsjusteringHendelseType.START_INNTEKTSJUSTERING_JOBB.lagParMedEventNameKey(),
ReguleringEvents.DATO to AarligInntektsjusteringRequest.utledLoependeFom(),
RapidEvents.KJOERING to AarligInntektsjusteringRequest.utledKjoering(),
RapidEvents.ANTALL to konfigurasjon.antall,
RapidEvents.SPESIFIKKE_SAKER to konfigurasjon.spesifikkeSaker.tilSeparertString(),
RapidEvents.EKSKLUDERTE_SAKER to konfigurasjon.ekskluderteSaker.tilSeparertString(),
),
).toJson()
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.etterlatte.behandling.sakId3
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.tidshendelser.JobbType
import no.nav.etterlatte.tidshendelser.aarliginntektsjustering.AarligInntektsjusteringService
import no.nav.etterlatte.tidshendelser.regulering.ReguleringService
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
Expand All @@ -34,10 +35,17 @@ class JobbPollerIntegrationTest(
private val aldersovergangerService = mockk<AldersovergangerService>()
private val omstillingsstoenadService = mockk<OmstillingsstoenadService>()
private val reguleringService = mockk<ReguleringService>()
private val inntektsjusteringService = mockk<AarligInntektsjusteringService>()
private val hendelseDao = HendelseDao(dataSource)
private val jobbTestdata = JobbTestdata(dataSource, hendelseDao)
private val jobbPoller =
JobbPoller(hendelseDao, aldersovergangerService, omstillingsstoenadService, reguleringService)
JobbPoller(
hendelseDao,
aldersovergangerService,
omstillingsstoenadService,
reguleringService,
inntektsjusteringService,
)

@BeforeEach
fun beforeEach() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package no.nav.etterlatte.libs.common.inntektsjustering

import no.nav.etterlatte.libs.common.sak.SakId
import java.time.Year
import java.time.YearMonth

data class AarligInntektsjusteringRequest(
val kjoering: String,
val loependeFom: YearMonth,
val saker: List<SakId>,
)
) {
companion object {
fun utledKjoering() = "INNTEKTSJUSTERING_JOBB_${Year.now().value}"

fun utledLoependeFom() = YearMonth.of(Year.now().value, 1)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ enum class KjoeringStatus {
IKKE_LOEPENDE,
FERDIGSTILT,
TIL_MANUELL,
TIL_MANUELL_UTEN_OPPGAVE,
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,5 @@ enum class JobbKategori {
ALDERSOVERGANG,
OMS_DOEDSDATO,
REGULERING,
AARLIG_INNTEKTSJUSTERING,
}

0 comments on commit ac371cb

Please sign in to comment.