diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/revurdering/Revurdering.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/revurdering/Revurdering.kt index ac021bbcbb..f329d7fe4d 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/revurdering/Revurdering.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/revurdering/Revurdering.kt @@ -39,6 +39,9 @@ sealed class Revurdering : Visitable { val fnr get() = this.tilRevurdering.fnr + val saksnummer + get() = this.tilRevurdering.saksnummer + open fun beregn(fradrag: List): Either { val beregningsgrunnlag = Beregningsgrunnlag.create( beregningsperiode = periode, diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/ServiceBuilder.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/ServiceBuilder.kt index 9d21eaa699..8a682a6ddd 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/ServiceBuilder.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/ServiceBuilder.kt @@ -73,7 +73,7 @@ object ServiceBuilder { microsoftGraphApiClient = clients.microsoftGraphApiClient, brevService = brevService, clock = clock, - ) + ).apply { addObserver(statistikkService) } val opprettVedtakssnapshotService = OpprettVedtakssnapshotService(databaseRepos.vedtakssnapshot) val ferdigstillIverksettingService = FerdigstillIverksettingServiceImpl( søknadsbehandlingRepo = databaseRepos.søknadsbehandling, diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImpl.kt index fc4f5d84f2..e11733cfa6 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImpl.kt @@ -28,6 +28,8 @@ import no.nav.su.se.bakover.service.brev.BrevService import no.nav.su.se.bakover.service.oppgave.OppgaveService import no.nav.su.se.bakover.service.person.PersonService import no.nav.su.se.bakover.service.sak.SakService +import no.nav.su.se.bakover.service.statistikk.Event +import no.nav.su.se.bakover.service.statistikk.EventObserver import no.nav.su.se.bakover.service.utbetaling.KunneIkkeUtbetale import no.nav.su.se.bakover.service.utbetaling.UtbetalingService import java.time.Clock @@ -44,6 +46,12 @@ internal class RevurderingServiceImpl( private val brevService: BrevService, private val clock: Clock, ) : RevurderingService { + private val observers: MutableList = mutableListOf() + fun addObserver(observer: EventObserver) { + observers.add(observer) + } + + fun getObservers(): List = observers.toList() override fun opprettRevurdering( sakId: UUID, @@ -97,6 +105,13 @@ internal class RevurderingServiceImpl( saksbehandler = saksbehandler ) revurderingRepo.lagre(revurdering) + observers.forEach { observer -> + observer.handle( + Event.Statistikk.RevurderingStatistikk.RevurderingOpprettet( + revurdering + ) + ) + } revurdering } } @@ -188,10 +203,18 @@ internal class RevurderingServiceImpl( revurdering.tilAttestering(oppgaveId, saksbehandler) } null -> return KunneIkkeRevurdere.FantIkkeRevurdering.left() - else -> return KunneIkkeRevurdere.UgyldigTilstand(revurdering::class, RevurderingTilAttestering::class).left() + else -> return KunneIkkeRevurdere.UgyldigTilstand(revurdering::class, RevurderingTilAttestering::class) + .left() } revurderingRepo.lagre(tilAttestering) + observers.forEach { observer -> + observer.handle( + Event.Statistikk.RevurderingStatistikk.RevurderingTilAttestering( + tilAttestering + ) + ) + } return tilAttestering.right() } @@ -255,6 +278,11 @@ internal class RevurderingServiceImpl( }.left() } revurderingRepo.lagre(iverksattRevurdering) + observers.forEach { observer -> + observer.handle( + Event.Statistikk.RevurderingStatistikk.RevurderingIverksatt(iverksattRevurdering) + ) + } return iverksattRevurdering.right() } null -> KunneIkkeIverksetteRevurdering.FantIkkeRevurdering.left() diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapper.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapper.kt new file mode 100644 index 0000000000..c9cd650406 --- /dev/null +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapper.kt @@ -0,0 +1,67 @@ +package no.nav.su.se.bakover.service.statistikk + +import no.nav.su.se.bakover.common.Tidspunkt +import no.nav.su.se.bakover.common.startOfDay +import no.nav.su.se.bakover.common.zoneIdOslo +import no.nav.su.se.bakover.domain.beregning.Beregning +import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering +import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering +import no.nav.su.se.bakover.domain.revurdering.Revurdering +import no.nav.su.se.bakover.domain.revurdering.RevurderingTilAttestering +import java.time.Clock + +internal class RevurderingStatistikkMapper(private val clock: Clock) { + // Behandling er en avgjørelse i en Sak, knyttet til en konkret behandlingstype (eks. søknad, revurdering, endring, klage)." + fun map(revurdering: Revurdering): Statistikk.Behandling { + Statistikk.Behandling( + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + funksjonellTid = FunksjonellTidMapper.map(revurdering), + tekniskTid = Tidspunkt.now(clock), + registrertDato = revurdering.opprettet.toLocalDate(zoneIdOslo), + mottattDato = revurdering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = revurdering.id, + sakId = revurdering.sakId, + saksnummer = revurdering.saksnummer.nummer, + behandlingStatus = revurdering::class.simpleName!!, + behandlingStatusBeskrivelse = BehandlingStatusBeskrivelseMapper.map(revurdering), + versjon = clock.millis(), + saksbehandler = revurdering.saksbehandler.navIdent, + relatertBehandlingId = revurdering.tilRevurdering.id + ).apply { + return when (revurdering) { + is OpprettetRevurdering -> this + is RevurderingTilAttestering -> this + is IverksattRevurdering -> { + copy( + resultat = "Innvilget", + resultatBegrunnelse = "Endring i søkers inntekt", // TODO ai: Må støtte flere grunner for revurdering senare + beslutter = revurdering.attestant.navIdent + ) + } + else -> throw ManglendeStatistikkMappingException(this, revurdering::class.java) + } + } + } + + internal object FunksjonellTidMapper { + fun map(revurdering: Revurdering) = when (revurdering) { + is OpprettetRevurdering -> revurdering.opprettet + is RevurderingTilAttestering -> revurdering.beregning.startOfFirstDay() + is IverksattRevurdering -> revurdering.beregning.startOfFirstDay() + else -> throw ManglendeStatistikkMappingException(this, revurdering::class.java) + } + + private fun Beregning.startOfFirstDay() = getPeriode().getFraOgMed().startOfDay(zoneIdOslo) + } + + internal object BehandlingStatusBeskrivelseMapper { + fun map(revurdering: Revurdering): String = + when (revurdering) { + is OpprettetRevurdering -> "Ny revurdering opprettet" + is RevurderingTilAttestering -> "Revurdering sendt til attestering" + is IverksattRevurdering -> "Revurdering iverksatt" + else -> throw ManglendeStatistikkMappingException(this, revurdering::class.java) + } + } +} diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/Statistikk.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/Statistikk.kt index cad8a027b5..6dfed4abeb 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/Statistikk.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/Statistikk.kt @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.databind.ser.std.ToStringSerializer import no.nav.su.se.bakover.common.Tidspunkt -import no.nav.su.se.bakover.domain.søknadsbehandling.BehandlingsStatus import java.time.LocalDate import java.util.UUID @@ -39,9 +38,9 @@ sealed class Statistikk { val sakId: UUID, @JsonSerialize(using = ToStringSerializer::class) val saksnummer: Long, - val behandlingType: String = "SOKNAD", - val behandlingTypeBeskrivelse: String? = "Søknad for SU Uføre", - val behandlingStatus: BehandlingsStatus, + val behandlingType: BehandlingType, + val behandlingTypeBeskrivelse: String?, + val behandlingStatus: String, val behandlingStatusBeskrivelse: String? = null, val utenlandstilsnitt: String = "NASJONAL", val utenlandstilsnittBeskrivelse: String? = null, @@ -68,4 +67,8 @@ sealed class Statistikk { ) : Statistikk() data class Aktør(val aktorId: Int, val rolle: String, val rolleBeskrivelse: String) + enum class BehandlingType(val beskrivelse: String) { + SOKNAD("Søknad for SU Uføre"), + REVURDERING("Revurdering av søknad for SU Uføre") + } } diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkService.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkService.kt index 8a58e64aa7..9dea14777c 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkService.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkService.kt @@ -1,6 +1,10 @@ package no.nav.su.se.bakover.service.statistikk import no.nav.su.se.bakover.domain.Sak +import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering +import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering +import no.nav.su.se.bakover.domain.revurdering.Revurdering +import no.nav.su.se.bakover.domain.revurdering.RevurderingTilAttestering import no.nav.su.se.bakover.domain.søknadsbehandling.Søknadsbehandling interface StatistikkService { @@ -30,5 +34,18 @@ sealed class Event { data class SøknadsbehandlingIverksatt(override val søknadsbehandling: Søknadsbehandling.Iverksatt) : SøknadsbehandlingStatistikk() } + + sealed class RevurderingStatistikk : Statistikk() { + abstract val revurdering: Revurdering + + data class RevurderingOpprettet(override val revurdering: OpprettetRevurdering) : + RevurderingStatistikk() + + data class RevurderingTilAttestering(override val revurdering: no.nav.su.se.bakover.domain.revurdering.RevurderingTilAttestering) : + RevurderingStatistikk() + + data class RevurderingIverksatt(override val revurdering: IverksattRevurdering) : + RevurderingStatistikk() + } } } diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImpl.kt index 4110e6c4a7..c3b04c063a 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImpl.kt @@ -63,6 +63,9 @@ internal class StatistikkServiceImpl( is Event.Statistikk.SøknadsbehandlingStatistikk -> { publiser(SøknadsbehandlingStatistikkMapper(clock).map(event.søknadsbehandling)) } + is Event.Statistikk.RevurderingStatistikk -> { + publiser(RevurderingStatistikkMapper(clock).map(event.revurdering)) + } } } } diff --git "a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapper.kt" "b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapper.kt" index 056e27106f..c644dce6ff 100644 --- "a/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapper.kt" +++ "b/service/src/main/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapper.kt" @@ -13,6 +13,8 @@ internal class SøknadsbehandlingStatistikkMapper( private val clock: Clock ) { fun map(søknadsbehandling: Søknadsbehandling): Statistikk.Behandling = Statistikk.Behandling( + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse, funksjonellTid = FunksjonellTidMapper.map(søknadsbehandling), tekniskTid = Tidspunkt.now(clock), registrertDato = RegistrertDatoMapper.map(søknadsbehandling), @@ -20,7 +22,7 @@ internal class SøknadsbehandlingStatistikkMapper( behandlingId = søknadsbehandling.id, sakId = søknadsbehandling.sakId, saksnummer = søknadsbehandling.saksnummer.nummer, - behandlingStatus = BehandlingStatusOgBehandlingStatusBeskrivelseMapper.map(søknadsbehandling.status).status, + behandlingStatus = BehandlingStatusOgBehandlingStatusBeskrivelseMapper.map(søknadsbehandling.status).status.toString(), behandlingStatusBeskrivelse = BehandlingStatusOgBehandlingStatusBeskrivelseMapper.map(søknadsbehandling.status).beskrivelse, versjon = clock.millis() ).apply { diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/ServiceBuilderTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/ServiceBuilderTest.kt index 9463b4e28e..27d2d8cd22 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/ServiceBuilderTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/ServiceBuilderTest.kt @@ -4,6 +4,7 @@ import com.nhaarman.mockitokotlin2.mock import io.kotest.matchers.collections.shouldContain import no.nav.su.se.bakover.client.Clients import no.nav.su.se.bakover.database.DatabaseRepos +import no.nav.su.se.bakover.service.revurdering.RevurderingServiceImpl import no.nav.su.se.bakover.service.sak.SakServiceImpl import no.nav.su.se.bakover.service.søknadsbehandling.FerdigstillIverksettingServiceImpl import no.nav.su.se.bakover.service.søknadsbehandling.SøknadsbehandlingServiceImpl @@ -49,6 +50,7 @@ internal class ServiceBuilderTest { ).let { (it.sak as SakServiceImpl).observers shouldContain it.statistikk (it.søknadsbehandling as SøknadsbehandlingServiceImpl).getObservers() shouldContain it.statistikk + (it.revurdering as RevurderingServiceImpl).getObservers() shouldContain it.statistikk (it.ferdigstillIverksettingService as FerdigstillIverksettingServiceImpl).getObservers() shouldContain it.statistikk } } diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImplTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImplTest.kt index a4ab853107..bb30020e3f 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImplTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/revurdering/RevurderingServiceImplTest.kt @@ -9,6 +9,7 @@ import com.nhaarman.mockitokotlin2.inOrder import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions +import com.nhaarman.mockitokotlin2.verifyZeroInteractions import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf import no.nav.su.se.bakover.client.person.MicrosoftGraphApiClient @@ -64,6 +65,8 @@ import no.nav.su.se.bakover.service.fixedClock import no.nav.su.se.bakover.service.oppgave.OppgaveService import no.nav.su.se.bakover.service.person.PersonService import no.nav.su.se.bakover.service.sak.SakService +import no.nav.su.se.bakover.service.statistikk.Event +import no.nav.su.se.bakover.service.statistikk.EventObserver import no.nav.su.se.bakover.service.utbetaling.UtbetalingService import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows @@ -166,18 +169,24 @@ internal class RevurderingServiceImplTest { on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right() } - val actual = createRevurderingService( + val revurderingService = createRevurderingService( sakService = sakServiceMock, revurderingRepo = revurderingRepoMock, oppgaveService = oppgaveServiceMock, personService = personServiceMock - ).opprettRevurdering( + ) + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } + revurderingService.addObserver(eventObserver) + + val actual = revurderingService.opprettRevurdering( sakId = sakId, fraOgMed = periode.getFraOgMed(), saksbehandler = saksbehandler ).getOrHandle { throw RuntimeException("Skal ikke kunne skje") } - inOrder(sakServiceMock, personServiceMock, oppgaveServiceMock, revurderingRepoMock) { + inOrder(sakServiceMock, personServiceMock, oppgaveServiceMock, revurderingRepoMock, eventObserver) { verify(sakServiceMock).hentSak(sakId) verify(revurderingRepoMock).hentRevurderingForBehandling(argThat { it shouldBe actual.tilRevurdering.id }) verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr }) @@ -191,6 +200,13 @@ internal class RevurderingServiceImplTest { } ) verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual.right() }) + verify(eventObserver).handle( + argThat { + it shouldBe Event.Statistikk.RevurderingStatistikk.RevurderingOpprettet( + actual as OpprettetRevurdering + ) + } + ) } verifyNoMoreInteractions(sakServiceMock, personServiceMock, oppgaveServiceMock, revurderingRepoMock) @@ -207,9 +223,15 @@ internal class RevurderingServiceImplTest { ).right() } - val actual = createRevurderingService( + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } + + val revurderingService = createRevurderingService( sakService = sakServiceMock - ).opprettRevurdering( + ).apply { addObserver(eventObserver) } + + val actual = revurderingService.opprettRevurdering( sakId = sakId, fraOgMed = periode.getFraOgMed(), saksbehandler = saksbehandler @@ -218,6 +240,7 @@ internal class RevurderingServiceImplTest { actual shouldBe KunneIkkeRevurdere.FantIngentingSomKanRevurderes.left() verify(sakServiceMock).hentSak(sakId) verifyNoMoreInteractions(sakServiceMock) + verifyZeroInteractions(eventObserver) } @Test @@ -243,9 +266,15 @@ internal class RevurderingServiceImplTest { on { hentSak(sakId) } doReturn sak.right() } - val actual = createRevurderingService( + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } + + val revurderingService = createRevurderingService( sakService = sakServiceMock - ).opprettRevurdering( + ).apply { addObserver(eventObserver) } + + val actual = revurderingService.opprettRevurdering( sakId = sakId, fraOgMed = periode.getFraOgMed(), saksbehandler = saksbehandler @@ -254,6 +283,7 @@ internal class RevurderingServiceImplTest { actual shouldBe KunneIkkeRevurdere.FantIngentingSomKanRevurderes.left() verify(sakServiceMock).hentSak(sakId) verifyNoMoreInteractions(sakServiceMock) + verifyZeroInteractions(eventObserver) } @Test @@ -282,10 +312,16 @@ internal class RevurderingServiceImplTest { on { hentSak(sakId) } doReturn sak.right() } - val actual = createRevurderingService( + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } + + val revurderingService = createRevurderingService( sakService = sakServiceMock, clock = Clock.fixed(1.februar(2021).startOfDay(zoneIdOslo).instant, zoneIdOslo) - ).opprettRevurdering( + ).apply { addObserver(eventObserver) } + + val actual = revurderingService.opprettRevurdering( sakId = sakId, fraOgMed = 1.juni(2021), saksbehandler = saksbehandler @@ -294,6 +330,7 @@ internal class RevurderingServiceImplTest { actual shouldBe KunneIkkeRevurdere.KanIkkeRevurderePerioderMedFlereAktiveStønadsperioder.left() verify(sakServiceMock).hentSak(sakId) verifyNoMoreInteractions(sakServiceMock) + verifyZeroInteractions(eventObserver) } @Test @@ -487,16 +524,22 @@ internal class RevurderingServiceImplTest { on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right() } - val actual = createRevurderingService( + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } + + val revurderingService = createRevurderingService( revurderingRepo = revurderingRepoMock, personService = personServiceMock, oppgaveService = oppgaveServiceMock - ).sendTilAttestering( + ).apply { addObserver(eventObserver) } + + val actual = revurderingService.sendTilAttestering( revurderingId = revurderingId, saksbehandler = saksbehandler, - ) + ).getOrHandle { throw RuntimeException("Skal ikke kunne skje") } - inOrder(revurderingRepoMock, personServiceMock, oppgaveServiceMock) { + inOrder(revurderingRepoMock, personServiceMock, oppgaveServiceMock, eventObserver) { verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId }) verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr }) verify(oppgaveServiceMock).opprettOppgave( @@ -508,7 +551,14 @@ internal class RevurderingServiceImplTest { ) } ) - verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual }) + verify(revurderingRepoMock).lagre(argThat { it shouldBe actual }) + verify(eventObserver).handle( + argThat { + it shouldBe Event.Statistikk.RevurderingStatistikk.RevurderingTilAttestering( + actual as RevurderingTilAttestering + ) + } + ) } verifyNoMoreInteractions(revurderingRepoMock, personServiceMock, oppgaveServiceMock) @@ -529,7 +579,10 @@ internal class RevurderingServiceImplTest { saksbehandler = saksbehandler, ) - result shouldBe KunneIkkeRevurdere.UgyldigTilstand(OpprettetRevurdering::class, RevurderingTilAttestering::class).left() + result shouldBe KunneIkkeRevurdere.UgyldigTilstand( + OpprettetRevurdering::class, + RevurderingTilAttestering::class + ).left() verify(revurderingRepoMock).hent(revurderingId) verifyNoMoreInteractions(revurderingRepoMock) @@ -653,15 +706,20 @@ internal class RevurderingServiceImplTest { val utbetalingServiceMock = mock { on { utbetal(any(), any(), any(), any()) } doReturn utbetalingMock.right() } + val eventObserver: EventObserver = mock { + on { handle(any()) }.doNothing() + } createRevurderingService( revurderingRepo = revurderingRepoMock, utbetalingService = utbetalingServiceMock - ).iverksett( - revurderingId = revurderingTilAttestering.id, - attestant = attestant, - ) shouldBe iverksattRevurdering.right() - inOrder(revurderingRepoMock, utbetalingMock, utbetalingServiceMock) { + ) + .apply { addObserver(eventObserver) } + .iverksett( + revurderingId = revurderingTilAttestering.id, + attestant = attestant, + ) shouldBe iverksattRevurdering.right() + inOrder(revurderingRepoMock, utbetalingMock, utbetalingServiceMock, eventObserver) { verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId }) verify(utbetalingServiceMock).utbetal( sakId = argThat { it shouldBe revurderingTilAttestering.sakId }, @@ -671,6 +729,7 @@ internal class RevurderingServiceImplTest { ) verify(utbetalingMock).id verify(revurderingRepoMock).lagre(argThat { it shouldBe iverksattRevurdering }) + verify(eventObserver).handle(argThat { it shouldBe Event.Statistikk.RevurderingStatistikk.RevurderingIverksatt(iverksattRevurdering) }) } verifyNoMoreInteractions( revurderingRepoMock, diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapperTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapperTest.kt new file mode 100644 index 0000000000..9000cbb3a0 --- /dev/null +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/RevurderingStatistikkMapperTest.kt @@ -0,0 +1,138 @@ +package no.nav.su.se.bakover.service.statistikk + +import com.nhaarman.mockitokotlin2.doReturn +import com.nhaarman.mockitokotlin2.mock +import io.kotest.matchers.shouldBe +import no.nav.su.se.bakover.common.Tidspunkt +import no.nav.su.se.bakover.common.UUID30 +import no.nav.su.se.bakover.common.januar +import no.nav.su.se.bakover.common.periode.Periode +import no.nav.su.se.bakover.common.startOfDay +import no.nav.su.se.bakover.common.zoneIdOslo +import no.nav.su.se.bakover.domain.NavIdentBruker +import no.nav.su.se.bakover.domain.Saksnummer +import no.nav.su.se.bakover.domain.eksterneiverksettingssteg.EksterneIverksettingsstegEtterUtbetaling +import no.nav.su.se.bakover.domain.oppgave.OppgaveId +import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering +import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering +import org.junit.jupiter.api.Test +import java.time.Clock +import java.util.UUID + +internal class RevurderingStatistikkMapperTest { + private val fixedClock: Clock = Clock.fixed(1.januar(2021).startOfDay().instant, zoneIdOslo) + + @Test + fun `mapper opprettet revurdering`() { + val opprettetRevurdering = OpprettetRevurdering( + id = UUID.randomUUID(), + periode = Periode.create(1.januar(2021), 31.januar(2021)), + opprettet = Tidspunkt.now(fixedClock), + tilRevurdering = mock { + on { sakId } doReturn UUID.randomUUID() + on { id } doReturn UUID.randomUUID() + on { saksnummer } doReturn Saksnummer(49L) + }, + saksbehandler = NavIdentBruker.Saksbehandler(navIdent = "7"), + ) + + RevurderingStatistikkMapper(fixedClock).map(opprettetRevurdering) shouldBe Statistikk.Behandling( + funksjonellTid = opprettetRevurdering.opprettet, + tekniskTid = Tidspunkt.now(fixedClock), + mottattDato = opprettetRevurdering.opprettet.toLocalDate(zoneIdOslo), + registrertDato = opprettetRevurdering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = opprettetRevurdering.id, + relatertBehandlingId = opprettetRevurdering.tilRevurdering.id, + sakId = opprettetRevurdering.sakId, + saksnummer = opprettetRevurdering.saksnummer.nummer, + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + behandlingStatus = "OpprettetRevurdering", + behandlingStatusBeskrivelse = "Ny revurdering opprettet", + utenlandstilsnitt = "NASJONAL", + utenlandstilsnittBeskrivelse = null, + ansvarligEnhetKode = "4815", + ansvarligEnhetType = "NORG", + behandlendeEnhetKode = "4815", + behandlendeEnhetType = "NORG", + totrinnsbehandling = true, + avsender = "su-se-bakover", + versjon = fixedClock.millis(), + vedtaksDato = null, + vedtakId = null, + resultat = null, + resultatBegrunnelse = null, + resultatBegrunnelseBeskrivelse = null, + resultatBeskrivelse = null, + beslutter = null, + saksbehandler = "7", + behandlingOpprettetAv = null, + behandlingOpprettetType = null, + behandlingOpprettetTypeBeskrivelse = null, + datoForUttak = null, + datoForUtbetaling = null + ) + } + + @Test + fun `mapper iverksatt revurdering`() { + val periode = Periode.create(fraOgMed = 1.januar(2021), tilOgMed = 31.januar(2021)) + + val iverksattRevurdering = IverksattRevurdering( + id = UUID.randomUUID(), + periode = periode, + opprettet = Tidspunkt.now(fixedClock), + tilRevurdering = mock { + on { sakId } doReturn UUID.randomUUID() + on { id } doReturn UUID.randomUUID() + on { saksnummer } doReturn Saksnummer(66L) + }, + saksbehandler = NavIdentBruker.Saksbehandler(navIdent = "99"), + beregning = mock { + on { getPeriode() } doReturn periode + }, + simulering = mock(), + oppgaveId = OppgaveId(value = "7"), + attestant = NavIdentBruker.Attestant(navIdent = "2"), + utbetalingId = UUID30.randomUUID(), + eksterneIverksettingsteg = EksterneIverksettingsstegEtterUtbetaling.VenterPåKvittering + + ) + RevurderingStatistikkMapper(fixedClock).map(iverksattRevurdering) shouldBe Statistikk.Behandling( + funksjonellTid = iverksattRevurdering.opprettet, + tekniskTid = Tidspunkt.now(fixedClock), + mottattDato = iverksattRevurdering.opprettet.toLocalDate(zoneIdOslo), + registrertDato = iverksattRevurdering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = iverksattRevurdering.id, + relatertBehandlingId = iverksattRevurdering.tilRevurdering.id, + sakId = iverksattRevurdering.sakId, + saksnummer = iverksattRevurdering.saksnummer.nummer, + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + behandlingStatus = "IverksattRevurdering", + behandlingStatusBeskrivelse = "Revurdering iverksatt", + utenlandstilsnitt = "NASJONAL", + utenlandstilsnittBeskrivelse = null, + ansvarligEnhetKode = "4815", + ansvarligEnhetType = "NORG", + behandlendeEnhetKode = "4815", + behandlendeEnhetType = "NORG", + totrinnsbehandling = true, + avsender = "su-se-bakover", + versjon = fixedClock.millis(), + vedtaksDato = null, + vedtakId = null, + resultat = "Innvilget", + resultatBegrunnelse = "Endring i søkers inntekt", + resultatBegrunnelseBeskrivelse = null, + resultatBeskrivelse = null, + beslutter = "2", + saksbehandler = "99", + behandlingOpprettetAv = null, + behandlingOpprettetType = null, + behandlingOpprettetTypeBeskrivelse = null, + datoForUttak = null, + datoForUtbetaling = null + ) + } +} diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkSchemaValidatorTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkSchemaValidatorTest.kt index af30d8daa2..9f4b150dba 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkSchemaValidatorTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkSchemaValidatorTest.kt @@ -18,7 +18,9 @@ internal class StatistikkSchemaValidatorTest { behandlingId = UUID.randomUUID(), sakId = UUID.randomUUID(), saksnummer = 2021, - behandlingStatus = BehandlingsStatus.IVERKSATT_AVSLAG, + behandlingStatus = BehandlingsStatus.IVERKSATT_AVSLAG.toString(), + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse ) val gyldigSak = Statistikk.Sak( diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImplTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImplTest.kt index e2b5a69a1b..99cfd41a62 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImplTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/StatistikkServiceImplTest.kt @@ -8,11 +8,13 @@ import com.nhaarman.mockitokotlin2.verify import io.kotest.matchers.shouldBe import no.nav.su.se.bakover.client.kafka.KafkaPublisher import no.nav.su.se.bakover.common.Tidspunkt +import no.nav.su.se.bakover.common.UUID30 import no.nav.su.se.bakover.common.endOfDay import no.nav.su.se.bakover.common.januar import no.nav.su.se.bakover.common.objectMapper import no.nav.su.se.bakover.common.periode.Periode import no.nav.su.se.bakover.common.startOfDay +import no.nav.su.se.bakover.common.toTidspunkt import no.nav.su.se.bakover.common.zoneIdOslo import no.nav.su.se.bakover.domain.AktørId import no.nav.su.se.bakover.domain.NavIdentBruker @@ -25,7 +27,12 @@ import no.nav.su.se.bakover.domain.behandling.Behandlingsinformasjon import no.nav.su.se.bakover.domain.behandling.avslag.Avslagsgrunn import no.nav.su.se.bakover.domain.behandling.withAlleVilkårOppfylt import no.nav.su.se.bakover.domain.beregning.Beregning +import no.nav.su.se.bakover.domain.eksterneiverksettingssteg.EksterneIverksettingsstegEtterUtbetaling +import no.nav.su.se.bakover.domain.oppdrag.simulering.Simulering import no.nav.su.se.bakover.domain.oppgave.OppgaveId +import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering +import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering +import no.nav.su.se.bakover.domain.revurdering.RevurderingTilAttestering import no.nav.su.se.bakover.domain.søknadsbehandling.BehandlingsStatus import no.nav.su.se.bakover.domain.søknadsbehandling.Søknadsbehandling import no.nav.su.se.bakover.service.FnrGenerator @@ -36,6 +43,7 @@ import no.nav.su.se.bakover.service.fixedClock import no.nav.su.se.bakover.service.person.PersonService import org.junit.jupiter.api.Test import java.time.Clock +import java.time.LocalDate import java.time.ZoneOffset import java.util.UUID @@ -144,9 +152,9 @@ internal class StatistikkServiceImplTest { behandlingId = søknadsbehandling.id, sakId = søknadsbehandling.sakId, saksnummer = søknadsbehandling.saksnummer.nummer, - behandlingStatus = søknadsbehandling.status, + behandlingStatus = søknadsbehandling.status.toString(), versjon = clock.millis(), - behandlingType = "SOKNAD", + behandlingType = Statistikk.BehandlingType.SOKNAD, behandlingTypeBeskrivelse = "Søknad for SU Uføre", behandlingStatusBeskrivelse = "Ny søknadsbehandling opprettet", utenlandstilsnitt = "NASJONAL", @@ -196,10 +204,12 @@ internal class StatistikkServiceImplTest { behandlingId = behandling.id, sakId = behandling.sakId, saksnummer = behandling.saksnummer.nummer, - behandlingStatus = behandling.status, + behandlingStatus = behandling.status.toString(), behandlingStatusBeskrivelse = "Avslått søknadsbehandling iverksatt", versjon = clock.millis(), saksbehandler = "Z1595", + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse, ) StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( @@ -245,12 +255,14 @@ internal class StatistikkServiceImplTest { behandlingId = behandling.id, sakId = behandling.sakId, saksnummer = behandling.saksnummer.nummer, - behandlingStatus = behandling.status, + behandlingStatus = behandling.status.toString(), behandlingStatusBeskrivelse = "Innvilget søknadsbehandling iverksatt", versjon = clock.millis(), resultat = "Innvilget", saksbehandler = "55", beslutter = "56", + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse ) StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( @@ -293,13 +305,15 @@ internal class StatistikkServiceImplTest { behandlingId = behandling.id, sakId = behandling.sakId, saksnummer = behandling.saksnummer.nummer, - behandlingStatus = behandling.status, + behandlingStatus = behandling.status.toString(), behandlingStatusBeskrivelse = "Avslått søknadsbehandling iverksatt", versjon = clock.millis(), resultat = "Avslått", saksbehandler = "55", beslutter = "56", - resultatBegrunnelse = "UFØRHET,UTENLANDSOPPHOLD_OVER_90_DAGER" + resultatBegrunnelse = "UFØRHET,UTENLANDSOPPHOLD_OVER_90_DAGER", + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse ) StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( @@ -350,11 +364,13 @@ internal class StatistikkServiceImplTest { behandlingId = underkjent.id, sakId = underkjent.sakId, saksnummer = underkjent.saksnummer.nummer, - behandlingStatus = underkjent.status, + behandlingStatus = underkjent.status.toString(), behandlingStatusBeskrivelse = "Innvilget søknadsbehandling sendt tilbake fra attestant til saksbehandler", versjon = clock.millis(), saksbehandler = "saksbehandler", beslutter = "attestant", + behandlingType = Statistikk.BehandlingType.SOKNAD, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.SOKNAD.beskrivelse, ) StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( @@ -366,4 +382,169 @@ internal class StatistikkServiceImplTest { argThat { it shouldBe objectMapper.writeValueAsString(expected) } ) } + + @Test + fun `publiserer statistikk for opprettet revurdering på kafka`() { + val kafkaPublisherMock: KafkaPublisher = mock { + on { publiser(any(), any()) }.doNothing() + } + val clock = Clock.fixed(1.januar(2020).endOfDay(ZoneOffset.UTC).instant, ZoneOffset.UTC) + val beregning = TestBeregning + + val opprettetRevurdering = OpprettetRevurdering( + id = UUID.randomUUID(), + opprettet = Tidspunkt.now(clock), + tilRevurdering = mock { + on { sakId } doReturn UUID.randomUUID() + on { id } doReturn UUID.randomUUID() + on { saksnummer } doReturn Saksnummer(55L) + }, + saksbehandler = NavIdentBruker.Saksbehandler("saksbehandler"), + periode = beregning.getPeriode() + ) + + val expected = Statistikk.Behandling( + funksjonellTid = opprettetRevurdering.opprettet, + tekniskTid = Tidspunkt.now(clock), + registrertDato = opprettetRevurdering.opprettet.toLocalDate(zoneIdOslo), + mottattDato = opprettetRevurdering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = opprettetRevurdering.id, + sakId = opprettetRevurdering.sakId, + saksnummer = opprettetRevurdering.saksnummer.nummer, + behandlingStatus = "OpprettetRevurdering", + behandlingStatusBeskrivelse = "Ny revurdering opprettet", + versjon = clock.millis(), + saksbehandler = "saksbehandler", + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + relatertBehandlingId = opprettetRevurdering.tilRevurdering.id + ) + + StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( + Event.Statistikk.RevurderingStatistikk.RevurderingOpprettet(opprettetRevurdering) + ) + + verify(kafkaPublisherMock).publiser( + argThat { it shouldBe behandlingTopicName }, + argThat { it shouldBe objectMapper.writeValueAsString(expected) } + ) + } + + @Test + fun `publiserer statistikk for revurdering sendt til attestering på kafka`() { + val kafkaPublisherMock: KafkaPublisher = mock { + on { publiser(any(), any()) }.doNothing() + } + val clock = Clock.fixed(1.januar(2020).endOfDay(ZoneOffset.UTC).instant, ZoneOffset.UTC) + val beregning = TestBeregning + + val revurderingTilAttestering = RevurderingTilAttestering( + id = UUID.randomUUID(), + opprettet = LocalDate.now(clock).atStartOfDay().toTidspunkt(zoneIdOslo), + tilRevurdering = mock { + on { sakId } doReturn UUID.randomUUID() + on { id } doReturn UUID.randomUUID() + on { saksnummer } doReturn Saksnummer(55L) + }, + saksbehandler = NavIdentBruker.Saksbehandler("saksbehandler"), + periode = beregning.getPeriode(), + beregning = beregning, + simulering = Simulering( + gjelderId = FnrGenerator.random(), + gjelderNavn = "Mr. Asd", + datoBeregnet = LocalDate.now(clock), + nettoBeløp = 100, + periodeList = listOf() + ), + oppgaveId = OppgaveId("55") + ) + + val expected = Statistikk.Behandling( + funksjonellTid = revurderingTilAttestering.opprettet, + tekniskTid = Tidspunkt.now(clock), + registrertDato = revurderingTilAttestering.opprettet.toLocalDate(zoneIdOslo), + mottattDato = revurderingTilAttestering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = revurderingTilAttestering.id, + sakId = revurderingTilAttestering.sakId, + saksnummer = revurderingTilAttestering.saksnummer.nummer, + behandlingStatus = "RevurderingTilAttestering", + behandlingStatusBeskrivelse = "Revurdering sendt til attestering", + versjon = clock.millis(), + saksbehandler = "saksbehandler", + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + relatertBehandlingId = revurderingTilAttestering.tilRevurdering.id + ) + + StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( + Event.Statistikk.RevurderingStatistikk.RevurderingTilAttestering(revurderingTilAttestering) + ) + + verify(kafkaPublisherMock).publiser( + argThat { it shouldBe behandlingTopicName }, + argThat { it shouldBe objectMapper.writeValueAsString(expected) } + ) + } + + @Test + fun `publiserer statistikk for iverksetting av revurdering på kafka`() { + val kafkaPublisherMock: KafkaPublisher = mock { + on { publiser(any(), any()) }.doNothing() + } + val clock = Clock.fixed(1.januar(2020).endOfDay(ZoneOffset.UTC).instant, ZoneOffset.UTC) + val beregning = TestBeregning + + val iverksattRevurdering = IverksattRevurdering( + id = UUID.randomUUID(), + opprettet = LocalDate.now(clock).atStartOfDay().toTidspunkt(zoneIdOslo), + tilRevurdering = mock { + on { sakId } doReturn UUID.randomUUID() + on { id } doReturn UUID.randomUUID() + on { saksnummer } doReturn Saksnummer(55L) + }, + saksbehandler = NavIdentBruker.Saksbehandler("saksbehandler"), + periode = beregning.getPeriode(), + beregning = beregning, + simulering = Simulering( + gjelderId = FnrGenerator.random(), + gjelderNavn = "Mr. Asd", + datoBeregnet = LocalDate.now(clock), + nettoBeløp = 100, + periodeList = listOf() + ), + oppgaveId = OppgaveId("55"), + attestant = NavIdentBruker.Attestant("attestant"), + utbetalingId = UUID30.randomUUID(), + eksterneIverksettingsteg = EksterneIverksettingsstegEtterUtbetaling.VenterPåKvittering + ) + + val expected = Statistikk.Behandling( + funksjonellTid = iverksattRevurdering.opprettet, + tekniskTid = Tidspunkt.now(clock), + registrertDato = iverksattRevurdering.opprettet.toLocalDate(zoneIdOslo), + mottattDato = iverksattRevurdering.opprettet.toLocalDate(zoneIdOslo), + behandlingId = iverksattRevurdering.id, + sakId = iverksattRevurdering.sakId, + saksnummer = iverksattRevurdering.saksnummer.nummer, + behandlingStatus = "IverksattRevurdering", + behandlingStatusBeskrivelse = "Revurdering iverksatt", + versjon = clock.millis(), + saksbehandler = "saksbehandler", + behandlingType = Statistikk.BehandlingType.REVURDERING, + behandlingTypeBeskrivelse = Statistikk.BehandlingType.REVURDERING.beskrivelse, + relatertBehandlingId = iverksattRevurdering.tilRevurdering.id, + resultat = "Innvilget", + resultatBegrunnelse = "Endring i søkers inntekt", + beslutter = "attestant" + ) + + StatistikkServiceImpl(kafkaPublisherMock, mock(), clock).handle( + Event.Statistikk.RevurderingStatistikk.RevurderingIverksatt(iverksattRevurdering) + ) + + verify(kafkaPublisherMock).publiser( + argThat { it shouldBe behandlingTopicName }, + argThat { it shouldBe objectMapper.writeValueAsString(expected) } + ) + } } diff --git "a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapperTest.kt" "b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapperTest.kt" index 6a99e50f62..b21f26b03d 100644 --- "a/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapperTest.kt" +++ "b/service/src/test/kotlin/no/nav/su/se/bakover/service/statistikk/S\303\270knadsbehandlingStatistikkMapperTest.kt" @@ -42,9 +42,9 @@ internal class SøknadsbehandlingStatistikkMapperTest { relatertBehandlingId = null, sakId = uavklartSøknadsbehandling.sakId, saksnummer = uavklartSøknadsbehandling.saksnummer.nummer, - behandlingType = "SOKNAD", + behandlingType = Statistikk.BehandlingType.SOKNAD, behandlingTypeBeskrivelse = "Søknad for SU Uføre", - behandlingStatus = BehandlingsStatus.OPPRETTET, + behandlingStatus = BehandlingsStatus.OPPRETTET.toString(), behandlingStatusBeskrivelse = "Ny søknadsbehandling opprettet", utenlandstilsnitt = "NASJONAL", utenlandstilsnittBeskrivelse = null, @@ -82,9 +82,9 @@ internal class SøknadsbehandlingStatistikkMapperTest { relatertBehandlingId = null, sakId = iverksattSøknadsbehandling.sakId, saksnummer = iverksattSøknadsbehandling.saksnummer.nummer, - behandlingType = "SOKNAD", + behandlingType = Statistikk.BehandlingType.SOKNAD, behandlingTypeBeskrivelse = "Søknad for SU Uføre", - behandlingStatus = BehandlingsStatus.IVERKSATT_INNVILGET, + behandlingStatus = BehandlingsStatus.IVERKSATT_INNVILGET.toString(), behandlingStatusBeskrivelse = "Innvilget søknadsbehandling iverksatt", utenlandstilsnitt = "NASJONAL", utenlandstilsnittBeskrivelse = null,