Skip to content

Commit

Permalink
sett behandling tilbake til vent og opprett manuell oppgave hvis snik…
Browse files Browse the repository at this point in the history
… i køen feiler (#4537)

### 💰 Hva skal gjøres, og hvorfor?

[Favro](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-20549)

Dersom en behandling er på vent og vi prøver å snike i køen og snikingen
feiler settes ikke behandlingen tilbake til påVent. Vi får da feil når
den forsøkes å tas av vent.

Setter nå behandlingen tilbake til påVent og henlegger den automatiske
behandlingen som prøver å snike i køen og lager en oppgave for manuell
behandling på behandlingen som var til vent i stedet.
  • Loading branch information
fredrikpf authored May 13, 2024
1 parent 7beb187 commit 3e7a191
Show file tree
Hide file tree
Showing 10 changed files with 228 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -109,22 +109,22 @@ class OppgaveService(
}

fun opprettOppgaveForManuellBehandling(
behandling: Behandling,
behandlingId: Long,
begrunnelse: String = "",
opprettLogginnslag: Boolean = false,
manuellOppgaveType: ManuellOppgaveType,
): String {
logger.info("Sender autovedtak til manuell behandling, se secureLogger for mer detaljer.")
secureLogger.info("Sender autovedtak til manuell behandling. Begrunnelse: $begrunnelse")
opprettTaskService.opprettOppgaveForManuellBehandlingTask(
behandlingId = behandling.id,
behandlingId = behandlingId,
beskrivelse = begrunnelse,
manuellOppgaveType = manuellOppgaveType,
)

if (opprettLogginnslag) {
loggService.opprettAutovedtakTilManuellBehandling(
behandling = behandling,
behandlingId = behandlingId,
tekst = begrunnelse,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import no.nav.familie.ba.sak.task.OppdaterLøpendeFlagg
import no.nav.familie.ba.sak.task.OpprettTaskService
import no.nav.familie.ba.sak.task.PatchFomPåVilkårTilFødselsdato
import no.nav.familie.ba.sak.task.PatchMergetIdentDto
import no.nav.familie.ba.sak.task.dto.HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSmåbarnstilleggTask
import no.nav.familie.ba.sak.task.internkonsistensavstemming.OpprettInternKonsistensavstemmingTaskerTask
import no.nav.familie.kontrakter.felles.Ressurs
import no.nav.familie.prosessering.domene.Task
Expand Down Expand Up @@ -357,4 +358,18 @@ class ForvalterController(
logger.info("Opprettet oppdaterLøpendeFlaggTask")
return ResponseEntity.ok(Ressurs.success("Kjørt ok"))
}

@PostMapping("/henlegg-autovedtak-og-sett-behandling-tilbake-paa-vent")
@Operation(summary = "Henlegger autovedtak og setter behandling tilbake på vent.")
@Transactional
fun henleggAutovedtakOgSettBehandlingTilbakePåVent(
@RequestBody behandlingList: List<Long>,
): ResponseEntity<Ressurs<String>> {
behandlingList.forEach { behandlingId ->
logger.info("Opprettet oppdaterLøpendeFlaggTask for behandlingId=$behandlingId")
val hennleggAutovedtakTask = HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSmåbarnstilleggTask.opprettTask(behandlingId)
taskRepository.save(hennleggAutovedtakTask)
}
return ResponseEntity.ok(Ressurs.success("Kjørt ok"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ class AutovedtakStegService(

when (åpenBehandling.status) {
BehandlingStatus.UTREDES,
BehandlingStatus.SATT_PÅ_VENT,
-> {
if (snikeIKøenService.kanSnikeForbi(åpenBehandling)) {
snikeIKøenService.settAktivBehandlingPåMaskinellVent(
Expand All @@ -213,6 +214,7 @@ class AutovedtakStegService(
return false
}
}

BehandlingStatus.FATTER_VEDTAK -> {
if (førstegangKjørt.until(LocalDateTime.now(), ChronoUnit.DAYS) < 7) {
throw RekjørSenereException(
Expand All @@ -221,6 +223,7 @@ class AutovedtakStegService(
)
}
}

BehandlingStatus.IVERKSETTER_VEDTAK,
BehandlingStatus.SATT_PÅ_MASKINELL_VENT,
-> {
Expand All @@ -229,14 +232,15 @@ class AutovedtakStegService(
triggerTid = LocalDateTime.now().plusHours(1),
)
}

else -> {
throw Feil("Ikke håndtert feilsituasjon på $åpenBehandling")
}
}

antallAutovedtakÅpenBehandling[autovedtaktype]?.increment()
oppgaveService.opprettOppgaveForManuellBehandling(
behandling = åpenBehandling,
behandlingId = åpenBehandling.id,
begrunnelse = "${autovedtaktype.displayName}: Bruker har åpen behandling",
manuellOppgaveType = ManuellOppgaveTypePEN_BEHANDLING,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,13 +241,13 @@ class AutovedtakFødselshendelseService(
behandling = behandling,
henleggBehandlingInfo =
RestHenleggBehandlingInfo(
årsak = HenleggÅrsak.FØDSELSHENDELSE_UGYLDIG_UTFALL,
årsak = HenleggÅrsak.AUTOMATISK_HENLAGT,
begrunnelse = begrunnelseForManuellOppgave,
),
)

oppgaveService.opprettOppgaveForManuellBehandling(
behandling = behandling,
behandlingId = behandling.id,
begrunnelse = "Fødselshendelse: $begrunnelseForManuellOppgave",
manuellOppgaveType = ManuellOppgaveType.FØDSELSHENDELSE,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,28 @@ import no.nav.familie.ba.sak.kjerne.autovedtak.AutovedtakStegService
import no.nav.familie.ba.sak.kjerne.autovedtak.SmåbarnstilleggData
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingService
import no.nav.familie.ba.sak.kjerne.behandling.HenleggÅrsak
import no.nav.familie.ba.sak.kjerne.behandling.RestHenleggBehandlingInfo
import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingStatus
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingType
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak
import no.nav.familie.ba.sak.kjerne.behandling.settpåvent.SettPåVentService
import no.nav.familie.ba.sak.kjerne.beregning.BeregningService
import no.nav.familie.ba.sak.kjerne.beregning.SmåbarnstilleggService
import no.nav.familie.ba.sak.kjerne.beregning.VedtaksperiodefinnerSmåbarnstilleggFeil
import no.nav.familie.ba.sak.kjerne.beregning.erEndringIOvergangsstønadFramITid
import no.nav.familie.ba.sak.kjerne.beregning.finnAktuellVedtaksperiodeOgLeggTilSmåbarnstilleggbegrunnelse
import no.nav.familie.ba.sak.kjerne.beregning.hentInnvilgedeOgReduserteAndelerSmåbarnstillegg
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.steg.StegService
import no.nav.familie.ba.sak.kjerne.steg.StegType
import no.nav.familie.ba.sak.kjerne.vedtak.VedtakService
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.VedtaksperiodeHentOgPersisterService
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.VedtaksperiodeService
import no.nav.familie.ba.sak.sikkerhet.SikkerhetContext
import no.nav.familie.ba.sak.task.IverksettMotOppdragTask
import no.nav.familie.ba.sak.task.OpprettTaskService
import no.nav.familie.ba.sak.task.dto.ManuellOppgaveType
import no.nav.familie.prosessering.internal.TaskService
import org.slf4j.LoggerFactory
Expand All @@ -48,6 +53,9 @@ class AutovedtakSmåbarnstilleggService(
private val oppgaveService: OppgaveService,
private val vedtaksperiodeHentOgPersisterService: VedtaksperiodeHentOgPersisterService,
private val localDateProvider: LocalDateProvider,
private valVentService: SettPåVentService,
private val stegService: StegService,
private val opprettTaskService: OpprettTaskService,
) : AutovedtakBehandlingService<SmåbarnstilleggData> {
private val antallVedtakOmOvergangsstønad: Counter =
Metrics.counter("behandling", "saksbehandling", "hendelse", "smaabarnstillegg", "antall")
Expand All @@ -61,7 +69,7 @@ class AutovedtakSmåbarnstilleggService(
KLARER_IKKE_BEGRUNNE("Klarer ikke å begrunne"),
}

private val antallVedtakOmOvergangsstønadTilManuellBehandling: Map<TilManuellBehandlingÅrsak, Counter> =
val antallVedtakOmOvergangsstønadTilManuellBehandling: Map<TilManuellBehandlingÅrsak, Counter> =
TilManuellBehandlingÅrsak.values().associateWith {
Metrics.counter(
"behandling",
Expand Down Expand Up @@ -118,7 +126,7 @@ class AutovedtakSmåbarnstilleggService(

if (behandlingEtterBehandlingsresultat.status != BehandlingStatus.IVERKSETTER_VEDTAK) {
return kanIkkeBehandleAutomatisk(
behandling = behandlingEtterBehandlingsresultat,
automatiskBehandling = behandlingEtterBehandlingsresultat,
metric = antallVedtakOmOvergangsstønadTilManuellBehandling[TilManuellBehandlingÅrsak.NYE_UTBETALINGSPERIODER_FØRER_TIL_MANUELL_BEHANDLING]!!,
meldingIOppgave = "Småbarnstillegg: endring i overgangsstønad må behandles manuelt",
)
Expand All @@ -137,7 +145,7 @@ class AutovedtakSmåbarnstilleggService(
BehandlingStatus.UTREDES,
)
return kanIkkeBehandleAutomatisk(
behandling = behandlingSomSkalManueltBehandles,
automatiskBehandling = behandlingSomSkalManueltBehandles,
metric = antallVedtakOmOvergangsstønadTilManuellBehandling[TilManuellBehandlingÅrsak.KLARER_IKKE_BEGRUNNE]!!,
meldingIOppgave = "Småbarnstillegg: klarer ikke bestemme vedtaksperiode som skal begrunnes, må behandles manuelt",
)
Expand Down Expand Up @@ -203,23 +211,56 @@ class AutovedtakSmåbarnstilleggService(
)
}

private fun kanIkkeBehandleAutomatisk(
behandling: Behandling,
@Transactional
fun kanIkkeBehandleAutomatisk(
automatiskBehandling: Behandling,
metric: Counter,
meldingIOppgave: String,
): String {
metric.increment()
val omgjortBehandling =
autovedtakService.omgjørBehandlingTilManuellOgKjørSteg(
behandling = behandling,
steg = StegType.VILKÅRSVURDERING,
)
return oppgaveService.opprettOppgaveForManuellBehandling(
behandling = omgjortBehandling,

val behandlingPåMaskinellVent =
behandlingHentOgPersisterService.hentBehandlinger(automatiskBehandling.fagsak.id, BehandlingStatus.SATT_PÅ_MASKINELL_VENT)
.singleOrNull()

val manuellBehandlingId =
if (behandlingPåMaskinellVent != null) {
stegService.håndterHenleggBehandling(
behandling = automatiskBehandling,
henleggBehandlingInfo =
RestHenleggBehandlingInfo(
årsak = HenleggÅrsak.AUTOMATISK_HENLAGT,
begrunnelse = "Småbarnstillegg: endring i overgangsstønad må behandles manuelt",
),
)
taBehandlingAvMaskinellVent(behandlingPåMaskinellVent.id).id
} else {
autovedtakService.omgjørBehandlingTilManuellOgKjørSteg(
behandling = automatiskBehandling,
steg = StegType.VILKÅRSVURDERING,
).id
}

oppgaveService.opprettOppgaveForManuellBehandling(
behandlingId = manuellBehandlingId,
begrunnelse = meldingIOppgave,
opprettLogginnslag = true,
manuellOppgaveType = ManuellOppgaveType.SMÅBARNSTILLEGG,
)
return meldingIOppgave
}

private fun taBehandlingAvMaskinellVent(behandlingPåMaskinellVentId: Long): Behandling {
val erBehandlingTilMaskinellVentOgsåPåVent =VentService.finnAktivSettPåVentPåBehandling(behandlingPåMaskinellVentId) != null

val status =
if (erBehandlingTilMaskinellVentOgsåPåVent) {
BehandlingStatus.SATT_PÅ_VENT
} else {
BehandlingStatus.UTREDES
}

return behandlingService.oppdaterStatusPåBehandling(behandlingPåMaskinellVentId, status)
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,15 +225,15 @@ class RestHenleggBehandlingInfo(
enum class HenleggÅrsak(val beskrivelse: String) {
SØKNAD_TRUKKET("Søknad trukket"),
FEILAKTIG_OPPRETTET("Behandling feilaktig opprettet"),
FØDSELSHENDELSE_UGYLDIG_UTFALL("Behandlingen er automatisk henlagt"),
AUTOMATISK_HENLAGT("Behandlingen er automatisk henlagt"),
TEKNISK_VEDLIKEHOLD("Teknisk vedlikehold"),
;

fun tilBehandlingsresultat() =
when (this) {
FEILAKTIG_OPPRETTET -> Behandlingsresultat.HENLAGT_FEILAKTIG_OPPRETTET
SØKNAD_TRUKKET -> Behandlingsresultat.HENLAGT_SØKNAD_TRUKKET
FØDSELSHENDELSE_UGYLDIG_UTFALL -> Behandlingsresultat.HENLAGT_AUTOMATISK_FØDSELSHENDELSE
AUTOMATISK_HENLAGT -> Behandlingsresultat.HENLAGT_AUTOMATISK_FØDSELSHENDELSE
TEKNISK_VEDLIKEHOLD -> Behandlingsresultat.HENLAGT_TEKNISK_VEDLIKEHOLD
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,12 @@ class LoggService(
}

fun opprettAutovedtakTilManuellBehandling(
behandling: Behandling,
behandlingId: Long,
tekst: String,
) {
lagre(
Logg(
behandlingId = behandling.id,
behandlingId = behandlingId,
type = LoggType.AUTOVEDTAK_TIL_MANUELL_BEHANDLING,
rolle =
SikkerhetContext.hentRolletilgangFraSikkerhetscontext(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package no.nav.familie.ba.sak.task.dto

import no.nav.familie.ba.sak.kjerne.autovedtak.småbarnstillegg.AutovedtakSmåbarnstilleggService
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService
import no.nav.familie.kontrakter.felles.objectMapper
import no.nav.familie.prosessering.AsyncTaskStep
import no.nav.familie.prosessering.TaskStepBeskrivelse
import no.nav.familie.prosessering.domene.Task
import org.springframework.stereotype.Service

@Service
@TaskStepBeskrivelse(
taskStepType = HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSmåbarnstilleggTask.TASK_STEP_TYPE,
beskrivelse = "Henlegg autovedtak og sett behandling tilbake til vent",
maxAntallFeil = 1,
)
class HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSmåbarnstilleggTask(
private val autovedtakSmåbarnstilleggService: AutovedtakSmåbarnstilleggService,
private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService,
) : AsyncTaskStep {
override fun doTask(task: Task) {
val meldingIOppgave = "Småbarnstillegg: endring i overgangsstønad må behandles manuelt"
val behandlingId = objectMapper.readValue(task.payload, Long::class.java)
val behandling = behandlingHentOgPersisterService.hent(behandlingId)
val metric =
autovedtakSmåbarnstilleggService
.antallVedtakOmOvergangsstønadTilManuellBehandling[AutovedtakSmåbarnstilleggService.TilManuellBehandlingÅrsak.NYE_UTBETALINGSPERIODER_FØRER_TIL_MANUELL_BEHANDLING]!!

autovedtakSmåbarnstilleggService.kanIkkeBehandleAutomatisk(behandling, metric, meldingIOppgave)
}

companion object {
const val TASK_STEP_TYPE = "henleggAutovedtakOgSettBehandlingTilbakeTilVentTask"

fun opprettTask(behandlingId: Long) =
Task(
type = TASK_STEP_TYPE,
payload = objectMapper.writeValueAsString(behandlingId),
properties = mapOf("behandlingId" to behandlingId.toString()).toProperties(),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import no.nav.familie.ba.sak.kjerne.vedtak.VedtakService
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.VedtaksperiodeService
import no.nav.familie.ba.sak.task.FerdigstillBehandlingTask
import no.nav.familie.ba.sak.task.IverksettMotOppdragTask
import no.nav.familie.ba.sak.task.OpprettTaskService
import no.nav.familie.ba.sak.task.StatusFraOppdragTask
import org.slf4j.Logger
import org.slf4j.LoggerFactory
Expand Down Expand Up @@ -105,6 +106,8 @@ class CucumberMock(
val tilbakekrevingService = mockTilbakekrevingService()
val taskRepository = MockTasker().mockTaskRepositoryWrapper(this)
val unleashNextMedContextService = mockUnleashNextMedContextService()
val mockPåVentService = mockk<SettPåVentService>()
val opprettTaskService = mockk<OpprettTaskService>()

val behandlingstemaService =
BehandlingstemaService(
Expand Down Expand Up @@ -446,6 +449,9 @@ class CucumberMock(
oppgaveService = oppgaveService,
vedtaksperiodeHentOgPersisterService = vedtaksperiodeHentOgPersisterService,
localDateProvider = mockedDateProvider,
VentService = mockPåVentService,
opprettTaskService = opprettTaskService,
stegService = stegService,
)
val iverksettMotOppdragTask = IverksettMotOppdragTask(stegService, behandlingHentOgPersisterService, personidentService, taskRepository)
val ferdigstillBehandlingTask = FerdigstillBehandlingTask(stegService = stegService, behandlingHentOgPersisterService = behandlingHentOgPersisterService)
Expand Down
Loading

0 comments on commit 3e7a191

Please sign in to comment.