diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt index b7400d9a594..bced9036f90 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/oppgave/OppgaveService.kt @@ -109,7 +109,7 @@ class OppgaveService( } fun opprettOppgaveForManuellBehandling( - behandling: Behandling, + behandlingId: Long, begrunnelse: String = "", opprettLogginnslag: Boolean = false, manuellOppgaveType: ManuellOppgaveType, @@ -117,14 +117,14 @@ class OppgaveService( 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, ) } diff --git a/src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterController.kt b/src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterController.kt index 3047f5a949d..112423f27e4 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterController.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterController.kt @@ -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 @@ -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, + ): ResponseEntity> { + 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")) + } } diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/AutovedtakStegService.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/AutovedtakStegService.kt index 1dac0bc218d..93fcec0435e 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/AutovedtakStegService.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/AutovedtakStegService.kt @@ -204,6 +204,7 @@ class AutovedtakStegService( when (åpenBehandling.status) { BehandlingStatus.UTREDES, + BehandlingStatus.SATT_PÅ_VENT, -> { if (snikeIKøenService.kanSnikeForbi(åpenBehandling)) { snikeIKøenService.settAktivBehandlingPåMaskinellVent( @@ -213,6 +214,7 @@ class AutovedtakStegService( return false } } + BehandlingStatus.FATTER_VEDTAK -> { if (førstegangKjørt.until(LocalDateTime.now(), ChronoUnit.DAYS) < 7) { throw RekjørSenereException( @@ -221,6 +223,7 @@ class AutovedtakStegService( ) } } + BehandlingStatus.IVERKSETTER_VEDTAK, BehandlingStatus.SATT_PÅ_MASKINELL_VENT, -> { @@ -229,6 +232,7 @@ class AutovedtakStegService( triggerTid = LocalDateTime.now().plusHours(1), ) } + else -> { throw Feil("Ikke håndtert feilsituasjon på $åpenBehandling") } @@ -236,7 +240,7 @@ class AutovedtakStegService( antallAutovedtakÅpenBehandling[autovedtaktype]?.increment() oppgaveService.opprettOppgaveForManuellBehandling( - behandling = åpenBehandling, + behandlingId = åpenBehandling.id, begrunnelse = "${autovedtaktype.displayName}: Bruker har åpen behandling", manuellOppgaveType = ManuellOppgaveType.ÅPEN_BEHANDLING, ) diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/f\303\270dselshendelse/AutovedtakF\303\270dselshendelseService.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/f\303\270dselshendelse/AutovedtakF\303\270dselshendelseService.kt" index 50ce461035b..7ef3ae19a81 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/f\303\270dselshendelse/AutovedtakF\303\270dselshendelseService.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/f\303\270dselshendelse/AutovedtakF\303\270dselshendelseService.kt" @@ -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, ) diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/sm\303\245barnstillegg/AutovedtakSm\303\245barnstilleggService.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/sm\303\245barnstillegg/AutovedtakSm\303\245barnstilleggService.kt" index eb33b596da6..bd18657e5c3 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/sm\303\245barnstillegg/AutovedtakSm\303\245barnstilleggService.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/autovedtak/sm\303\245barnstillegg/AutovedtakSm\303\245barnstilleggService.kt" @@ -11,10 +11,13 @@ 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 @@ -22,12 +25,14 @@ 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 @@ -48,6 +53,9 @@ class AutovedtakSmåbarnstilleggService( private val oppgaveService: OppgaveService, private val vedtaksperiodeHentOgPersisterService: VedtaksperiodeHentOgPersisterService, private val localDateProvider: LocalDateProvider, + private val påVentService: SettPåVentService, + private val stegService: StegService, + private val opprettTaskService: OpprettTaskService, ) : AutovedtakBehandlingService { private val antallVedtakOmOvergangsstønad: Counter = Metrics.counter("behandling", "saksbehandling", "hendelse", "smaabarnstillegg", "antall") @@ -61,7 +69,7 @@ class AutovedtakSmåbarnstilleggService( KLARER_IKKE_BEGRUNNE("Klarer ikke å begrunne"), } - private val antallVedtakOmOvergangsstønadTilManuellBehandling: Map = + val antallVedtakOmOvergangsstønadTilManuellBehandling: Map = TilManuellBehandlingÅrsak.values().associateWith { Metrics.counter( "behandling", @@ -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", ) @@ -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", ) @@ -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 = på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 { diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/behandling/BehandlingStegController.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/behandling/BehandlingStegController.kt index 952cbcb4e8b..188938ea257 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/behandling/BehandlingStegController.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/behandling/BehandlingStegController.kt @@ -225,7 +225,7 @@ 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"), ; @@ -233,7 +233,7 @@ enum class HenleggÅrsak(val beskrivelse: String) { 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 } } diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/logg/LoggService.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/logg/LoggService.kt index 0fd682dabd7..8c09c5d0b58 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/logg/LoggService.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/logg/LoggService.kt @@ -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( diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/task/dto/HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSm\303\245barnstilleggTask.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/task/dto/HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSm\303\245barnstilleggTask.kt" new file mode 100644 index 00000000000..4c721e7409e --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/ba/sak/task/dto/HenleggAutovedtakOgSettBehandlingTilbakeTilVentVedSm\303\245barnstilleggTask.kt" @@ -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(), + ) + } +} diff --git a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/mock/CucumberMock.kt b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/mock/CucumberMock.kt index f2d32adde03..cf52f8cf05a 100644 --- a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/mock/CucumberMock.kt +++ b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/mock/CucumberMock.kt @@ -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 @@ -105,6 +106,8 @@ class CucumberMock( val tilbakekrevingService = mockTilbakekrevingService() val taskRepository = MockTasker().mockTaskRepositoryWrapper(this) val unleashNextMedContextService = mockUnleashNextMedContextService() + val mockPåVentService = mockk() + val opprettTaskService = mockk() val behandlingstemaService = BehandlingstemaService( @@ -446,6 +449,9 @@ class CucumberMock( oppgaveService = oppgaveService, vedtaksperiodeHentOgPersisterService = vedtaksperiodeHentOgPersisterService, localDateProvider = mockedDateProvider, + påVentService = mockPåVentService, + opprettTaskService = opprettTaskService, + stegService = stegService, ) val iverksettMotOppdragTask = IverksettMotOppdragTask(stegService, behandlingHentOgPersisterService, personidentService, taskRepository) val ferdigstillBehandlingTask = FerdigstillBehandlingTask(stegService = stegService, behandlingHentOgPersisterService = behandlingHentOgPersisterService) diff --git a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/task/FerdigstillBehandlingTaskTest.kt b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/task/FerdigstillBehandlingTaskTest.kt index e3c6e6198a4..60f18edfc0b 100644 --- a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/task/FerdigstillBehandlingTaskTest.kt +++ b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/task/FerdigstillBehandlingTaskTest.kt @@ -1,5 +1,7 @@ package no.nav.familie.ba.sak.task +import io.micrometer.core.instrument.Metrics +import no.nav.familie.ba.sak.common.LocalDateProvider import no.nav.familie.ba.sak.common.kjørStegprosessForFGB import no.nav.familie.ba.sak.common.lagVilkårsvurdering import no.nav.familie.ba.sak.common.randomBarnFnr @@ -7,7 +9,11 @@ import no.nav.familie.ba.sak.common.randomFnr import no.nav.familie.ba.sak.config.AbstractSpringIntegrationTest import no.nav.familie.ba.sak.config.DatabaseCleanupService import no.nav.familie.ba.sak.config.MockPersonopplysningerService.Companion.leggTilPersonInfo +import no.nav.familie.ba.sak.integrasjoner.oppgave.OppgaveService +import no.nav.familie.ba.sak.kjerne.autovedtak.AutovedtakService import no.nav.familie.ba.sak.kjerne.autovedtak.fødselshendelse.Resultat +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.ba.sak.kjerne.behandling.BehandlingService import no.nav.familie.ba.sak.kjerne.behandling.SettPåMaskinellVentÅrsak import no.nav.familie.ba.sak.kjerne.behandling.SnikeIKøenService @@ -20,6 +26,10 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingUnderkategori import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandlingsresultat import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak import no.nav.familie.ba.sak.kjerne.behandling.domene.tilstand.BehandlingStegTilstand +import no.nav.familie.ba.sak.kjerne.behandling.settpåvent.SettPåVentService +import no.nav.familie.ba.sak.kjerne.behandling.settpåvent.SettPåVentÅrsak +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.brev.BrevmalService import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService import no.nav.familie.ba.sak.kjerne.fagsak.FagsakStatus @@ -29,16 +39,19 @@ import no.nav.familie.ba.sak.kjerne.personident.PersonidentService 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.kjerne.vilkårsvurdering.VilkårsvurderingService import no.nav.familie.ba.sak.statistikk.saksstatistikk.domene.SaksstatistikkMellomlagringRepository import no.nav.familie.ba.sak.statistikk.saksstatistikk.domene.SaksstatistikkMellomlagringType +import no.nav.familie.prosessering.internal.TaskService import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired +import java.time.LocalDate class FerdigstillBehandlingTaskTest : AbstractSpringIntegrationTest() { @Autowired @@ -83,6 +96,36 @@ class FerdigstillBehandlingTaskTest : AbstractSpringIntegrationTest() { @Autowired lateinit var snikeIKøenService: SnikeIKøenService + @Autowired + lateinit var behandlingHentOgPersisterService: BehandlingHentOgPersisterService + + @Autowired + lateinit var småbarnstilleggService: SmåbarnstilleggService + + @Autowired + lateinit var taskService: TaskService + + @Autowired + lateinit var beregningService: BeregningService + + @Autowired + lateinit var autovedtakService: AutovedtakService + + @Autowired + lateinit var oppgaveService: OppgaveService + + @Autowired + lateinit var vedtaksperiodeHentOgPersisterService: VedtaksperiodeHentOgPersisterService + + @Autowired + lateinit var localDateProvider: LocalDateProvider + + @Autowired + lateinit var settPåVentService: SettPåVentService + + @Autowired + lateinit var opprettTaskService: OpprettTaskService + private val fnr = randomFnr() @BeforeEach @@ -177,6 +220,61 @@ class FerdigstillBehandlingTaskTest : AbstractSpringIntegrationTest() { @Nested inner class BehandlingPåMaskinellVent { + private val autovedtakSmåbarnstilleggService = + AutovedtakSmåbarnstilleggService( + behandlingService = behandlingService, + fagsakService = fagsakService, + behandlingHentOgPersisterService = behandlingHentOgPersisterService, + vedtakService = vedtakService, + vedtaksperiodeService = vedtaksperiodeService, + småbarnstilleggService = småbarnstilleggService, + taskService = taskService, + beregningService = beregningService, + autovedtakService = autovedtakService, + oppgaveService = oppgaveService, + vedtaksperiodeHentOgPersisterService = vedtaksperiodeHentOgPersisterService, + localDateProvider = localDateProvider, + påVentService = settPåVentService, + opprettTaskService = opprettTaskService, + stegService = stegService, + ) + + @Test + fun `skal henlegge behandling hvis vi ikke kan behandle automatisk`() { + val opprinneligÅpenBehandling = opprettBehandling(status = BehandlingStatus.UTREDES) + settPåMaskinellVent(opprinneligÅpenBehandling) + + val automatiskBehandling = kjørSteg(Resultat.IKKE_OPPFYLT) + autovedtakSmåbarnstilleggService.kanIkkeBehandleAutomatisk(automatiskBehandling, Metrics.counter("test"), meldingIOppgave = "test") + + val automatiskBehandlingEtterHenleggelse = behandlingRepository.finnBehandling(automatiskBehandling.id) + assertThat(automatiskBehandlingEtterHenleggelse.resultat).isEqualTo(Behandlingsresultat.HENLAGT_AUTOMATISK_FØDSELSHENDELSE) + assertThat(automatiskBehandlingEtterHenleggelse.aktiv).isFalse() + + val opprinneligBehandlingEtterHenleggelse = behandlingRepository.finnBehandling(opprinneligÅpenBehandling.id) + assertThat(opprinneligBehandlingEtterHenleggelse.aktiv).isTrue() + assertThat(opprinneligBehandlingEtterHenleggelse.status).isEqualTo(BehandlingStatus.UTREDES) + } + + @Test + fun `skal henlegge behandling og sette behandling tilbake til på vent hvis den var på vent i utgangspunktet`() { + val opprinneligÅpenBehandling = opprettBehandling(status = BehandlingStatus.UTREDES) + settPåVentService.settBehandlingPåVent(opprinneligÅpenBehandling.id, LocalDate.now().plusMonths(1), SettPåVentÅrsak.AVVENTER_DOKUMENTASJON) + settPåMaskinellVent(opprinneligÅpenBehandling) + + val automatiskBehandling = kjørSteg(Resultat.IKKE_OPPFYLT) + val meldingIOppgave = autovedtakSmåbarnstilleggService.kanIkkeBehandleAutomatisk(automatiskBehandling, Metrics.counter("test"), meldingIOppgave = "test") + assertThat(meldingIOppgave).isEqualTo("test") + + val automatiskBehandlingEtterHenleggelse = behandlingRepository.finnBehandling(automatiskBehandling.id) + assertThat(automatiskBehandlingEtterHenleggelse.resultat).isEqualTo(Behandlingsresultat.HENLAGT_AUTOMATISK_FØDSELSHENDELSE) + assertThat(automatiskBehandlingEtterHenleggelse.aktiv).isFalse() + + val opprinneligBehandlingEtterHenleggelse = behandlingRepository.finnBehandling(opprinneligÅpenBehandling.id) + assertThat(opprinneligBehandlingEtterHenleggelse.aktiv).isTrue() + assertThat(opprinneligBehandlingEtterHenleggelse.status).isEqualTo(BehandlingStatus.SATT_PÅ_VENT) + } + @Test fun `skal reaktivere en behandling som er på maskinell vent`() { val behandling1 = opprettBehandling(status = BehandlingStatus.UTREDES)