diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/db/MeldingRepository.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/db/MeldingRepository.kt index 61d611892..503953715 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/db/MeldingRepository.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/db/MeldingRepository.kt @@ -17,7 +17,7 @@ internal interface MeldingRepository { vedtaksperiodeId: UUID, ): OverstyringIgangsattKorrigertSøknad? - fun erAutomatisertKorrigertSøknadHåndtert(meldingId: UUID): Boolean + fun erKorrigertSøknadAutomatiskBehandlet(meldingId: UUID): Boolean fun finnAntallAutomatisertKorrigertSøknad(vedtaksperiodeId: UUID): Int diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/MeldingDao.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/MeldingDao.kt index c5dfbdbea..0fd615e57 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/MeldingDao.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/MeldingDao.kt @@ -84,7 +84,7 @@ internal class MeldingDao(queryRunner: QueryRunner) : MeldingRepository, QueryRu "vedtaksperiodeId" to vedtaksperiodeId, ).single { it.int("antall") } - override fun erAutomatisertKorrigertSøknadHåndtert(meldingId: UUID): Boolean = + override fun erKorrigertSøknadAutomatiskBehandlet(meldingId: UUID): Boolean = asSQL( """ SELECT count(1) AS antall diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/automatisering/Automatisering.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/automatisering/Automatisering.kt index 25f21b0b5..db1871c3a 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/automatisering/Automatisering.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/automatisering/Automatisering.kt @@ -17,6 +17,7 @@ import no.nav.helse.mediator.Subsumsjonsmelder import no.nav.helse.modell.MeldingDao import no.nav.helse.modell.MeldingDao.OverstyringIgangsattKorrigertSøknad import no.nav.helse.modell.Toggle +import no.nav.helse.modell.automatisering.Automatisering.AutomatiserKorrigertSøknadResultat.SkyldesKorrigertSøknad import no.nav.helse.modell.egenansatt.EgenAnsattDao import no.nav.helse.modell.gosysoppgaver.ÅpneGosysOppgaverDao import no.nav.helse.modell.overstyring.OverstyringDao @@ -113,13 +114,12 @@ internal class Automatisering( if (problemer.isNotEmpty()) return Automatiseringsresultat.KanIkkeAutomatiseres(problemer) - overstyringIgangsattKorrigertSøknad(fødselsnummer, vedtaksperiodeId)?.let { - when (val resultat = kanKorrigertSøknadAutomatiseres(vedtaksperiodeId, it)) { - is AutomatiserKorrigertSøknadResultat.KanIkkeAutomatiseres -> { - return Automatiseringsresultat.KanIkkeAutomatiseres(listOf(resultat.årsak)) - } - AutomatiserKorrigertSøknadResultat.OK -> {} - } + when (val resultat = vurderOmBehandlingSkyldesKorrigertSøknad(fødselsnummer, vedtaksperiodeId)) { + is SkyldesKorrigertSøknad.KanIkkeAutomatiseres, + -> return Automatiseringsresultat.KanIkkeAutomatiseres(listOf(resultat.årsak)) + is AutomatiserKorrigertSøknadResultat.SkyldesIkkeKorrigertSøknad, + is SkyldesKorrigertSøknad.KanAutomatiseres, + -> {} } if (!erEgenAnsattEllerSkjermet(fødselsnummer)) { @@ -136,7 +136,7 @@ internal class Automatisering( egenAnsattRepository.erEgenAnsatt(fødselsnummer) == true || personRepository.finnAdressebeskyttelse(fødselsnummer) != Adressebeskyttelse.Ugradert - private fun overstyringIgangsattKorrigertSøknad( + private fun finnSisteOverstyringIgangsattHvisSkyldesKorrigertSøknad( fødselsnummer: String, vedtaksperiodeId: UUID, ): OverstyringIgangsattKorrigertSøknad? = @@ -145,9 +145,24 @@ internal class Automatisering( } private sealed interface AutomatiserKorrigertSøknadResultat { - data object OK : AutomatiserKorrigertSøknadResultat + sealed interface SkyldesKorrigertSøknad : AutomatiserKorrigertSøknadResultat { + data class KanIkkeAutomatiseres(val årsak: String) : SkyldesKorrigertSøknad + + data object KanAutomatiseres : SkyldesKorrigertSøknad + } + + data object SkyldesIkkeKorrigertSøknad : AutomatiserKorrigertSøknadResultat + } + + private fun vurderOmBehandlingSkyldesKorrigertSøknad( + fødselsnummer: String, + vedtaksperiodeId: UUID, + ): AutomatiserKorrigertSøknadResultat { + val overstyringIgangsattKorrigertSøknad = + finnSisteOverstyringIgangsattHvisSkyldesKorrigertSøknad(fødselsnummer, vedtaksperiodeId) + ?: return AutomatiserKorrigertSøknadResultat.SkyldesIkkeKorrigertSøknad - data class KanIkkeAutomatiseres(val årsak: String) : AutomatiserKorrigertSøknadResultat + return kanKorrigertSøknadAutomatiseres(vedtaksperiodeId, overstyringIgangsattKorrigertSøknad) } private fun kanKorrigertSøknadAutomatiseres( @@ -155,7 +170,7 @@ internal class Automatisering( overstyringIgangsattKorrigertSøknad: OverstyringIgangsattKorrigertSøknad, ): AutomatiserKorrigertSøknadResultat { val hendelseId = UUID.fromString(overstyringIgangsattKorrigertSøknad.meldingId) - if (meldingRepository.erAutomatisertKorrigertSøknadHåndtert(hendelseId)) return AutomatiserKorrigertSøknadResultat.OK + if (meldingRepository.erKorrigertSøknadAutomatiskBehandlet(hendelseId)) return SkyldesKorrigertSøknad.KanAutomatiseres val orgnummer = vedtakDao.finnOrgnummer(vedtaksperiodeId) val vedtaksperiodeIdKorrigertSøknad = @@ -177,21 +192,21 @@ internal class Automatisering( meldingRepository.opprettAutomatiseringKorrigertSøknad(it, hendelseId) if (merEnn6MånederSidenVedtakPåFørsteMottattSøknad) { - return AutomatiserKorrigertSøknadResultat.KanIkkeAutomatiseres( + return SkyldesKorrigertSøknad.KanIkkeAutomatiseres( "Mer enn 6 måneder siden vedtak på første mottatt søknad", ) } if (antallKorrigeringer >= 2) { - return AutomatiserKorrigertSøknadResultat.KanIkkeAutomatiseres( + return SkyldesKorrigertSøknad.KanIkkeAutomatiseres( "Antall automatisk godkjente korrigerte søknader er større eller lik 2", ) } - return AutomatiserKorrigertSøknadResultat.OK + return SkyldesKorrigertSøknad.KanAutomatiseres } // Hvis vi ikke finner vedtaksperiodeIdKorrigertSøknad, så er det fordi vi vedtaksperioden som er korrigert er AUU som vi ikke trenger å telle - return AutomatiserKorrigertSøknadResultat.OK + return SkyldesKorrigertSøknad.KanAutomatiseres } private fun avgjørStikkprøve( diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/MeldingDaoTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/MeldingDaoTest.kt index db7a83f0e..a1247941c 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/MeldingDaoTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/MeldingDaoTest.kt @@ -47,7 +47,7 @@ internal class MeldingDaoTest : DatabaseIntegrationTest() { @Test fun `finn ut om automatisering av korrigert søknad allerede er håndtert`() { meldingDao.opprettAutomatiseringKorrigertSøknad(VEDTAKSPERIODE, HENDELSE_ID) - val håndtert = meldingDao.erAutomatisertKorrigertSøknadHåndtert(HENDELSE_ID) + val håndtert = meldingDao.erKorrigertSøknadAutomatiskBehandlet(HENDELSE_ID) assertTrue(håndtert) } diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/automatisering/AutomatiseringTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/automatisering/AutomatiseringTest.kt index 201c06efa..40f539965 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/modell/automatisering/AutomatiseringTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/modell/automatisering/AutomatiseringTest.kt @@ -45,7 +45,7 @@ internal class AutomatiseringTest { private val vedtaksperiodeId = UUID.randomUUID() private val utbetalingId = UUID.randomUUID() private val hendelseId = UUID.randomUUID() - private val periodetype = Periodetype.FORLENGELSE + private val periodetype = FORLENGELSE private val periodeFom = LocalDate.now() private val vedtakDaoMock = mockk() @@ -127,7 +127,7 @@ internal class AutomatiseringTest { ) every { vedtakDaoMock.finnOrgnummer(vedtaksperiodeId) } returns orgnummer every { meldingDaoMock.finnAntallAutomatisertKorrigertSøknad(vedtaksperiodeId) } returns 1 - every { meldingDaoMock.erAutomatisertKorrigertSøknadHåndtert(hendelseId) } returns false + every { meldingDaoMock.erKorrigertSøknadAutomatiskBehandlet(hendelseId) } returns false every { generasjonDaoMock.førsteGenerasjonVedtakFattetTidspunkt( vedtaksperiodeId, @@ -197,7 +197,7 @@ internal class AutomatiseringTest { @Test fun `Automatisering av korrigert søknad er allerede håndtert for tidligere sykefraværstilfelle`() { - every { meldingDaoMock.erAutomatisertKorrigertSøknadHåndtert(hendelseId) } returns true + every { meldingDaoMock.erKorrigertSøknadAutomatiskBehandlet(hendelseId) } returns true blirAutomatiskBehandlet() } @@ -339,7 +339,7 @@ internal class AutomatiseringTest { } private fun forsøkAutomatisering( - periodetype: Periodetype = Periodetype.FORLENGELSE, + periodetype: Periodetype = FORLENGELSE, generasjoner: List = listOf(Generasjon(UUID.randomUUID(), vedtaksperiodeId, 1.januar, 31.januar, 1.januar)), utbetaling: Utbetaling = enUtbetaling(), ) = automatisering.utfør(