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

Behandle automatisk inntekt task #2815

Merged
merged 12 commits into from
Mar 27, 2025
Merged
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -35,5 +35,5 @@ class AutomatiskRevurderingController(

data class AutomatiskRevurdering(
val personIdent: String,
val automatiskRevurdert: Boolean,
val kanAutomatiskRevurderes: Boolean,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

)
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package no.nav.familie.ef.sak.behandling.revurdering

import no.nav.familie.ef.sak.behandling.BehandlingService
import no.nav.familie.ef.sak.behandling.domain.BehandlingType
import no.nav.familie.ef.sak.fagsak.FagsakService
import no.nav.familie.ef.sak.fagsak.domain.Fagsak
import no.nav.familie.ef.sak.infrastruktur.config.ObjectMapperProvider.objectMapper
import no.nav.familie.ef.sak.infrastruktur.featuretoggle.FeatureToggleService
import no.nav.familie.ef.sak.infrastruktur.featuretoggle.Toggle
import no.nav.familie.kontrakter.ef.felles.BehandlingÅrsak
import no.nav.familie.kontrakter.felles.ef.StønadType
import no.nav.familie.prosessering.AsyncTaskStep
import no.nav.familie.prosessering.TaskStepBeskrivelse
import no.nav.familie.prosessering.domene.Task
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.util.Properties

data class PayloadBehandleAutomatiskInntektsendringTask(
val personIdent: String,
val ukeÅr: String,
)

@Service
@TaskStepBeskrivelse(
taskStepType = BehandleAutomatiskInntektsendringTask.TYPE,
beskrivelse = "Skal automatisk opprette en ny behandling ved automatisk inntektsendring",
)
class BehandleAutomatiskInntektsendringTask(
private val behandlingService: BehandlingService,
private val fagsakService: FagsakService,
private val featureToggleService: FeatureToggleService,
) : AsyncTaskStep {
private val secureLogger = LoggerFactory.getLogger("secureLogger")

override fun doTask(task: Task) {
val toggle = featureToggleService.isEnabled(Toggle.BEHANDLE_AUTOMATISK_INNTEKTSENDRING)

val personIdent = task.payload
val fagsak =
fagsakService.finnFagsak(
personIdenter = setOf(personIdent),
stønadstype = StønadType.OVERGANGSSTØNAD,
)

loggInfoOpprett(personIdent, fagsak)

if (toggle) {
if (fagsak != null) {
loggInfoOpprett(personIdent, fagsak)

behandlingService.opprettBehandling(
behandlingType = BehandlingType.REVURDERING,
fagsakId = fagsak.id,
behandlingsårsak = BehandlingÅrsak.AUTOMATISK_INNTEKTSENDRING,
)
} else {
secureLogger.error("Finner ikke fagsak for personIdent=$personIdent på stønadstype=${StønadType.OVERGANGSSTØNAD} under automatisk inntektsendring")
}
}
}

companion object {
const val TYPE = "behandleAutomatiskInntektsendringTask"

fun opprettTask(payload: String): Task {
val payloadObject = objectMapper.readValue(payload, PayloadBehandleAutomatiskInntektsendringTask::class.java)

return Task(
type = TYPE,
payload = payload,
properties =
Properties().apply {
this["personIdent"] = payloadObject.personIdent
},
)
}
}

fun loggInfoOpprett(
personIdent: String,
fagsak: Fagsak?,
) {
secureLogger.info("Kan opprette behandling med $personIdent stønadstype=${StønadType.OVERGANGSSTØNAD} faksakId ${fagsak?.id}")
}
}
Original file line number Diff line number Diff line change
@@ -81,4 +81,11 @@ class RevurderingController(
tilgangService.validerTilgangTilBehandling(behandlingId, AuditLoggerEvent.ACCESS)
return Ressurs.success(revurderingService.hentRevurderingsinformasjon(behandlingId))
}

@PostMapping("opprett-automatisk")
fun opprettAutomatiskInntektsendringsTask(
@RequestBody personIdenter: List<String>,
) {
revurderingService.opprettAutomatiskInntektsendringTask(personIdenter)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kunne dette like greit vært gjort i endepunktet automatisk-revurdering (AutomatiskRevurderingController)?
Ref kommentar i PR på ef-personhendelse

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enig i det, byttet 👍

}
}
Original file line number Diff line number Diff line change
@@ -28,9 +28,13 @@ import no.nav.familie.ef.sak.vedtak.VedtakService
import no.nav.familie.ef.sak.vilkår.VurderingService
import no.nav.familie.kontrakter.ef.felles.BehandlingÅrsak
import no.nav.familie.kontrakter.felles.ef.StønadType
import no.nav.familie.kontrakter.felles.objectMapper
import no.nav.familie.leader.LeaderClient
import no.nav.familie.prosessering.internal.TaskService
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.time.LocalDate
import java.time.temporal.IsoFields
import java.util.UUID

@Service
@@ -142,6 +146,26 @@ class RevurderingService(
return revurdering
}

@Transactional
fun opprettAutomatiskInntektsendringTask(personIdenter: List<String>) {
if (LeaderClient.isLeader() != true) {
return
}

val ukeÅr = LocalDate.now().let { "${it.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)}-${it.year}" }

personIdenter.forEach { personIdent ->

val payload = objectMapper.writeValueAsString(PayloadBehandleAutomatiskInntektsendringTask(personIdent = personIdent, ukeÅr = ukeÅr))
val finnesTask = taskService.finnTaskMedPayloadOgType(payload, BehandleAutomatiskInntektsendringTask.TYPE)

if (finnesTask == null) {
val task = BehandleAutomatiskInntektsendringTask.opprettTask(payload)
taskService.save(task)
}
}
}

private fun vilkårsbehandleNyeBarn(
revurdering: Behandling,
vilkårsbehandleNyeBarn: VilkårsbehandleNyeBarn,
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ class FeatureToggleController(
Toggle.VELG_ÅRSAK_VED_KLAGE_OPPRETTELSE,
Toggle.FRONTEND_VIS_MARKERE_GODKJENNE_OPPGAVE_MODAL,
Toggle.VIS_AUTOMATISK_INNTEKTSENDRING,
Toggle.BEHANDLE_AUTOMATISK_INNTEKTSENDRING,
)

@GetMapping
Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@ enum class Toggle(
"Release",
),
KONTROLLER_NÆRINGSINNTEKT("familie.ef.sak.kontroller-naeringsinntekt"),
BEHANDLE_AUTOMATISK_INNTEKTSENDRING("familie.ef.sak-behandle-automatisk-inntektsendring-task", "Release"),

// Operational
G_BEREGNING("familie.ef.sak.g-beregning", "Operational"),
Original file line number Diff line number Diff line change
@@ -238,6 +238,7 @@ class VedtakController(
for (personIdent in personIdentToBehandlingIds.keys) {
val behandlingId = personIdentToBehandlingIds[personIdent]
val forventetInntektForBehandling = behandlingIdToForventetInntektMap[behandlingId]
secureLogger.info("PersonIdent: $personIdent ForventetInntektForBehandling: $forventetInntektForBehandling")
if (forventetInntektForBehandling == null) {
secureLogger.warn("Fant ikke behandling $behandlingId knyttet til ident $personIdent - får ikke vurdert inntekt")
} else {