Skip to content

Commit

Permalink
♻️ Gjør vurdering av om korrigert søknad kan automatiseres litt mer l…
Browse files Browse the repository at this point in the history
…esbar

Co-authored-by: Øyvind Hagen <[email protected]>
Co-authored-by: Øydis Kind Refsum <[email protected]>
  • Loading branch information
3 people committed Oct 31, 2024
1 parent 9095f11 commit 076bc39
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)) {
Expand All @@ -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(
dselsnummer: String,
vedtaksperiodeId: UUID,
): OverstyringIgangsattKorrigertSøknad? =
Expand All @@ -145,17 +145,32 @@ 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(
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(
vedtaksperiodeId: UUID,
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 =
Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<PgVedtakDao>()
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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()
}

Expand Down Expand Up @@ -339,7 +339,7 @@ internal class AutomatiseringTest {
}

private fun forsøkAutomatisering(
periodetype: Periodetype = Periodetype.FORLENGELSE,
periodetype: Periodetype = FORLENGELSE,
generasjoner: List<Generasjon> = listOf(Generasjon(UUID.randomUUID(), vedtaksperiodeId, 1.januar, 31.januar, 1.januar)),
utbetaling: Utbetaling = enUtbetaling(),
) = automatisering.utfør(
Expand Down

0 comments on commit 076bc39

Please sign in to comment.