Skip to content

Commit 59146dc

Browse files
elithoMartinMekkoydisrefsumtrinelinderudchsko
committed
✨ Legger til tilstand på totrinnsvurdering
Co-authored-by: Martin Solheim <[email protected]> Co-authored-by: Øydis Kind Refsum <[email protected]> Co-authored-by: Trine Linderud <[email protected]> Co-authored-by: Christian Skovborg Gule <[email protected]> Co-authored-by: Svein Elgstøen <[email protected]>
1 parent 458b5bf commit 59146dc

File tree

15 files changed

+131
-93
lines changed

15 files changed

+131
-93
lines changed

spesialist-api/src/main/kotlin/no/nav/helse/mediator/GodkjenningService.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import no.nav.helse.modell.melding.Saksbehandlerløsning
1212
import no.nav.helse.modell.periodehistorikk.Historikkinnslag
1313
import no.nav.helse.modell.saksbehandler.SaksbehandlerDto
1414
import no.nav.helse.modell.totrinnsvurdering.Totrinnsvurdering
15+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.GODKJENT
1516
import no.nav.helse.spesialist.api.Godkjenninghåndterer
1617
import no.nav.helse.spesialist.api.vedtak.GodkjenningDto
1718
import no.nav.helse.spesialist.domain.Saksbehandler
@@ -88,7 +89,7 @@ class GodkjenningService(
8889
featureToggles.skalBenytteNyTotrinnsvurderingsløsning(),
8990
)
9091

91-
if (totrinnsvurdering?.erBeslutteroppgave == true && godkjenningDTO.godkjent) {
92+
if (totrinnsvurdering?.tilstand == GODKJENT && godkjenningDTO.godkjent) {
9293
val beslutter =
9394
totrinnsvurdering.beslutter?.let { saksbehandlerId ->
9495
session.saksbehandlerRepository.finn(saksbehandlerId)?.let { saksbehandler ->

spesialist-api/src/main/kotlin/no/nav/helse/mediator/SaksbehandlerMediator.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import no.nav.helse.modell.saksbehandler.handlinger.SkjønnsfastsattArbeidsgiver
5959
import no.nav.helse.modell.saksbehandler.handlinger.SkjønnsfastsattSykepengegrunnlag
6060
import no.nav.helse.modell.stoppautomatiskbehandling.StansAutomatiskBehandlinghåndtererImpl
6161
import no.nav.helse.modell.totrinnsvurdering.Totrinnsvurdering
62+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_BESLUTTER
6263
import no.nav.helse.modell.vedtak.Utfall
6364
import no.nav.helse.modell.vilkårsprøving.Lovhjemmel
6465
import no.nav.helse.spesialist.api.SendIReturResult
@@ -291,7 +292,7 @@ class SaksbehandlerMediator(
291292
val totrinnsvurdering =
292293
eksisterendeTotrinnsvurdering(vedtaksperiodeId, fødselsnummer, totrinnsvurderingRepository)
293294
val feil =
294-
if (totrinnsvurdering?.erBeslutteroppgave == true) {
295+
if (totrinnsvurdering?.tilstand == AVVENTER_BESLUTTER) {
295296
if (!legacySaksbehandler.harTilgangTil(listOf(Egenskap.BESLUTTER)) && !env.kanGodkjenneUtenBesluttertilgang) {
296297
VedtakResultat.Feil.BeslutterFeil.TrengerBeslutterRolle()
297298
} else if (totrinnsvurdering.saksbehandler?.value == legacySaksbehandler.oid && !env.kanBeslutteEgneSaker) {

spesialist-api/src/main/kotlin/no/nav/helse/spesialist/api/graphql/resolvers/ApiBeregnetPeriodeResolver.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import no.nav.helse.db.api.TotrinnsvurderingApiDao
1818
import no.nav.helse.db.api.VarselApiRepository
1919
import no.nav.helse.mediator.SaksbehandlerMediator
2020
import no.nav.helse.mediator.oppgave.ApiOppgaveService
21+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_BESLUTTER
22+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_SAKSBEHANDLER
2123
import no.nav.helse.spesialist.api.graphql.mapping.tilApiDag
2224
import no.nav.helse.spesialist.api.graphql.mapping.tilApiHendelse
2325
import no.nav.helse.spesialist.api.graphql.mapping.tilApiInntektstype
@@ -369,10 +371,10 @@ data class ApiBeregnetPeriodeResolver(
369371
return sessionFactory.transactionalSessionScope { sessionContext ->
370372
sessionContext.totrinnsvurderingRepository.finn(fødselsnummer)?.let {
371373
ApiTotrinnsvurdering(
372-
erRetur = it.erRetur,
374+
erRetur = it.tilstand == AVVENTER_SAKSBEHANDLER && it.saksbehandler != null,
373375
saksbehandler = it.saksbehandler?.value,
374376
beslutter = it.beslutter?.value,
375-
erBeslutteroppgave = !it.erRetur && it.saksbehandler != null,
377+
erBeslutteroppgave = it.tilstand == AVVENTER_BESLUTTER,
376378
)
377379
}
378380
}

spesialist-application/src/main/kotlin/no/nav/helse/modell/automatisering/Automatisering.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import no.nav.helse.modell.person.Adressebeskyttelse
2020
import no.nav.helse.modell.person.HentEnhetløsning.Companion.erEnhetUtland
2121
import no.nav.helse.modell.person.Sykefraværstilfelle
2222
import no.nav.helse.modell.stoppautomatiskbehandling.StansAutomatiskBehandlingMediator
23+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.GODKJENT
2324
import no.nav.helse.modell.utbetaling.Refusjonstype
2425
import no.nav.helse.modell.utbetaling.Utbetaling
2526
import no.nav.helse.modell.vedtaksperiode.Inntektskilde
@@ -258,7 +259,7 @@ internal class Automatisering(
258259
val antallÅpneGosysoppgaver = åpneGosysOppgaverDao.antallÅpneOppgaver(fødselsnummer)
259260
val harPågåendeOverstyring =
260261
if (featureToggles.skalBenytteNyTotrinnsvurderingsløsning()) {
261-
totrinnsvurderingRepository.finn(fødselsnummer)?.ferdigstilt == false
262+
totrinnsvurderingRepository.finn(fødselsnummer)?.tilstand != GODKJENT
262263
} else {
263264
overstyringDao.harVedtaksperiodePågåendeOverstyring(vedtaksperiodeId)
264265
}

spesialist-application/src/main/kotlin/no/nav/helse/modell/kommando/ReserverPersonHvisTildeltCommand.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import no.nav.helse.FeatureToggles
44
import no.nav.helse.db.OppgaveDao
55
import no.nav.helse.db.ReservasjonDao
66
import no.nav.helse.db.TildelingDao
7+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_BESLUTTER
78
import no.nav.helse.spesialist.application.TotrinnsvurderingRepository
89
import org.slf4j.Logger
910
import org.slf4j.LoggerFactory
@@ -31,7 +32,7 @@ internal class ReserverPersonHvisTildeltCommand(
3132
totrinnsvurderingRepository.finn(vedtaksperiodeId)
3233
}
3334
val saksbehandlerOid: UUID =
34-
if (totrinnsvurdering?.erBeslutteroppgave == true) {
35+
if (totrinnsvurdering?.tilstand == AVVENTER_BESLUTTER) {
3536
totrinnsvurdering.saksbehandler?.value ?: tildeltSaksbehandler.oid
3637
} else {
3738
tildeltSaksbehandler.oid

spesialist-application/src/main/kotlin/no/nav/helse/modell/kommando/VurderBehovForTotrinnskontroll.kt

+25-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import no.nav.helse.modell.periodehistorikk.Historikkinnslag
88
import no.nav.helse.modell.person.Sykefraværstilfelle
99
import no.nav.helse.modell.person.vedtaksperiode.Vedtaksperiode
1010
import no.nav.helse.modell.totrinnsvurdering.Totrinnsvurdering
11+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_BESLUTTER
1112
import no.nav.helse.spesialist.application.TotrinnsvurderingRepository
1213
import org.slf4j.LoggerFactory
1314
import java.util.UUID
@@ -49,10 +50,14 @@ internal class VurderBehovForTotrinnskontroll(
4950
if ((kreverTotrinnsvurdering && !vedtaksperiodeHarFerdigstiltOppgave) || eksisterendeTotrinnsvurdering != null) {
5051
logg.info("Vedtaksperioden: $vedtaksperiodeId trenger totrinnsvurdering")
5152

52-
val totrinnsvurdering = (eksisterendeTotrinnsvurdering ?: Totrinnsvurdering.ny(vedtaksperiodeId, fødselsnummer))
53-
if (totrinnsvurdering.erBeslutteroppgave) {
54-
totrinnsvurdering.settRetur()
55-
periodehistorikkDao.lagre(Historikkinnslag.totrinnsvurderingAutomatiskRetur(), vedtaksperiode.gjeldendeUnikId)
53+
val totrinnsvurdering =
54+
(eksisterendeTotrinnsvurdering ?: Totrinnsvurdering.ny(vedtaksperiodeId, fødselsnummer))
55+
if (totrinnsvurdering.tilstand == AVVENTER_BESLUTTER) {
56+
totrinnsvurdering.settAvventerSaksbehandler()
57+
periodehistorikkDao.lagre(
58+
Historikkinnslag.totrinnsvurderingAutomatiskRetur(),
59+
vedtaksperiode.gjeldendeUnikId,
60+
)
5661
}
5762
totrinnsvurderingRepository.lagre(totrinnsvurdering)
5863

@@ -69,13 +74,24 @@ internal class VurderBehovForTotrinnskontroll(
6974
kreverTotrinnsvurdering: Boolean,
7075
vedtaksperiodeHarFerdigstiltOppgave: Boolean,
7176
) {
72-
if ((kreverTotrinnsvurdering && !vedtaksperiodeHarFerdigstiltOppgave) || overstyringDao.harVedtaksperiodePågåendeOverstyring(vedtaksperiodeId)) {
77+
if ((kreverTotrinnsvurdering && !vedtaksperiodeHarFerdigstiltOppgave) ||
78+
overstyringDao.harVedtaksperiodePågåendeOverstyring(
79+
vedtaksperiodeId,
80+
)
81+
) {
7382
logg.info("Vedtaksperioden: $vedtaksperiodeId trenger totrinnsvurdering")
7483

75-
val totrinnsvurdering = totrinnsvurderingRepository.finn(vedtaksperiodeId) ?: Totrinnsvurdering.ny(vedtaksperiodeId, fødselsnummer)
76-
if (totrinnsvurdering.erBeslutteroppgave) {
77-
totrinnsvurdering.settRetur()
78-
periodehistorikkDao.lagre(Historikkinnslag.totrinnsvurderingAutomatiskRetur(), vedtaksperiode.gjeldendeUnikId)
84+
val totrinnsvurdering =
85+
totrinnsvurderingRepository.finn(vedtaksperiodeId) ?: Totrinnsvurdering.ny(
86+
vedtaksperiodeId,
87+
fødselsnummer,
88+
)
89+
if (totrinnsvurdering.tilstand == AVVENTER_BESLUTTER) {
90+
totrinnsvurdering.settAvventerSaksbehandler()
91+
periodehistorikkDao.lagre(
92+
Historikkinnslag.totrinnsvurderingAutomatiskRetur(),
93+
vedtaksperiode.gjeldendeUnikId,
94+
)
7995
}
8096

8197
totrinnsvurderingRepository.lagre(totrinnsvurdering)

spesialist-application/src/test/kotlin/no/nav/helse/spesialist/application/kommando/VurderBehovForTotrinnskontrollTest.kt

+11-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import no.nav.helse.modell.person.vedtaksperiode.Varsel
1616
import no.nav.helse.modell.person.vedtaksperiode.Vedtaksperiode
1717
import no.nav.helse.modell.totrinnsvurdering.Totrinnsvurdering
1818
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingId
19+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand
20+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_BESLUTTER
21+
import no.nav.helse.modell.totrinnsvurdering.TotrinnsvurderingTilstand.AVVENTER_SAKSBEHANDLER
1922
import no.nav.helse.spesialist.application.TotrinnsvurderingRepository
2023
import no.nav.helse.spesialist.domain.SaksbehandlerOid
2124
import no.nav.helse.spesialist.domain.legacy.LegacyBehandling
@@ -125,19 +128,22 @@ internal class VurderBehovForTotrinnskontrollTest {
125128
}
126129

127130
@Test
128-
fun `Hvis totrinnsvurdering har beslutter skal totrinnsvurderingen markeres som retur`() {
131+
fun `Hvis totrinnsvurdering har beslutter skal tilstanden til totrinnsvurderingen settes tilbake til AVVENTER_SAKSBEHANDLER`() {
129132
val saksbehandler = lagSaksbehandlerOid()
130133
val beslutter = lagSaksbehandlerOid()
131134

132135
every { overstyringDao.harVedtaksperiodePågåendeOverstyring(any()) } returns true
133-
totrinnsvurderingRepository.totrinnsvurderingSomSkalReturneres = lagTotrinnsvurdering(false, saksbehandler, beslutter)
136+
totrinnsvurderingRepository.totrinnsvurderingSomSkalReturneres = lagTotrinnsvurdering(
137+
saksbehandler = saksbehandler,
138+
beslutter = beslutter
139+
)
134140

135141
assertTrue(command.execute(context))
136142

137143
assertEquals(1, totrinnsvurderingRepository.lagredeTotrinnsvurderinger.size)
138144
verify(exactly = 1) { oppgaveService.reserverOppgave(saksbehandler.value, FØDSELSNUMMER) }
139145

140-
assertEquals(true, totrinnsvurderingRepository.lagredeTotrinnsvurderinger.single().erRetur)
146+
assertEquals(AVVENTER_SAKSBEHANDLER, totrinnsvurderingRepository.lagredeTotrinnsvurderinger.single().tilstand)
141147

142148
verify(exactly = 1) {
143149
periodehistorikkDao.lagre(historikkinnslag = any<TotrinnsvurderingAutomatiskRetur>(), any())
@@ -170,22 +176,21 @@ internal class VurderBehovForTotrinnskontrollTest {
170176
private fun lagSaksbehandlerOid(oid: UUID = UUID.randomUUID()) = SaksbehandlerOid(oid)
171177

172178
private fun lagTotrinnsvurdering(
173-
erRetur: Boolean = false,
179+
tilstand: TotrinnsvurderingTilstand = AVVENTER_BESLUTTER,
174180
saksbehandler: SaksbehandlerOid = lagSaksbehandlerOid(),
175181
beslutter: SaksbehandlerOid = lagSaksbehandlerOid()
176182
) =
177183
Totrinnsvurdering.fraLagring(
178184
id = TotrinnsvurderingId(nextLong()),
179185
vedtaksperiodeId = VEDTAKSPERIODE_ID_2,
180186
fødselsnummer = FØDSELSNUMMER,
181-
erRetur = erRetur,
182187
saksbehandler = saksbehandler,
183188
beslutter = beslutter,
184189
utbetalingId = null,
185190
opprettet = LocalDateTime.now(),
186191
oppdatert = LocalDateTime.now(),
187192
overstyringer = emptyList(),
188-
ferdigstilt = false,
193+
tilstand = tilstand,
189194
)
190195

191196
private fun command(nyTotrinnsløype: Boolean = true) =
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
create type totrinnsvurdering_tilstand as enum ('AVVENTER_SAKSBEHANDLER', 'AVVENTER_BESLUTTER', 'GODKJENT');
2+
3+
alter table totrinnsvurdering
4+
add column tilstand totrinnsvurdering_tilstand;
5+
6+
update totrinnsvurdering set tilstand = 'GODKJENT' where tilstand is null and utbetaling_id_ref is not null;
7+
update totrinnsvurdering set tilstand = 'AVVENTER_SAKSBEHANDLER' where tilstand is null and er_retur = true;
8+
update totrinnsvurdering set tilstand = 'AVVENTER_BESLUTTER' where tilstand is null and saksbehandler is not null;
9+
update totrinnsvurdering set tilstand = 'AVVENTER_SAKSBEHANDLER' where tilstand is null;
10+
11+
alter table totrinnsvurdering
12+
alter column tilstand set not null;
13+
14+
alter table totrinnsvurdering drop column er_retur;

spesialist-db/src/main/kotlin/no/nav/helse/spesialist/db/repository/PgTotrinnsvurderingRepository.kt

+12-14
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ class PgTotrinnsvurderingRepository(session: Session) : QueryRunner by MedSessio
3939
SELECT tv.id,
4040
tv.vedtaksperiode_id,
4141
p.fødselsnummer,
42-
er_retur,
4342
tv.saksbehandler as saksbehandler_oid,
4443
tv.beslutter as beslutter_oid,
4544
ui.id as utbetaling_id,
45+
tv.tilstand,
4646
tv.opprettet,
4747
tv.oppdatert
4848
FROM totrinnsvurdering tv
4949
INNER JOIN person p on tv.person_ref = p.id
5050
LEFT JOIN utbetaling_id ui on ui.id = tv.utbetaling_id_ref
5151
WHERE p.fødselsnummer = :fodselsnummer
52-
AND utbetaling_id_ref IS NULL
52+
AND tv.tilstand != 'GODKJENT'
5353
""".trimIndent(),
5454
"fodselsnummer" to fødselsnummer,
5555
).singleOrNull { it.toTotrinnsvurdering() }
@@ -61,10 +61,10 @@ class PgTotrinnsvurderingRepository(session: Session) : QueryRunner by MedSessio
6161
SELECT DISTINCT ON (tv.id)
6262
v.vedtaksperiode_id,
6363
tv.id,
64-
er_retur,
6564
tv.saksbehandler as saksbehandler_oid,
6665
tv.beslutter as beslutter_oid,
6766
ui.id as utbetaling_id,
67+
tv.tilstand,
6868
tv.opprettet,
6969
tv.oppdatert,
7070
p.fødselsnummer
@@ -74,43 +74,43 @@ class PgTotrinnsvurderingRepository(session: Session) : QueryRunner by MedSessio
7474
INNER JOIN oppgave o on v.id = o.vedtak_ref
7575
LEFT JOIN utbetaling_id ui on ui.id = tv.utbetaling_id_ref
7676
WHERE v.vedtaksperiode_id = :vedtaksperiodeId
77-
AND utbetaling_id_ref IS NULL
77+
AND tv.tilstand != 'GODKJENT'
7878
""".trimIndent(),
7979
"vedtaksperiodeId" to vedtaksperiodeId,
8080
).singleOrNull { it.toTotrinnsvurderingDeprecated() }
8181

8282
private fun insert(totrinnsvurdering: Totrinnsvurdering): Long =
8383
asSQL(
8484
"""
85-
INSERT INTO totrinnsvurdering (vedtaksperiode_id, er_retur, saksbehandler, beslutter, person_ref, opprettet, oppdatert)
86-
SELECT :vedtaksperiodeId, :erRetur, :saksbehandler, :beslutter, p.id, :opprettet, null
85+
INSERT INTO totrinnsvurdering (vedtaksperiode_id, saksbehandler, beslutter, person_ref, tilstand, opprettet, oppdatert)
86+
SELECT :vedtaksperiodeId, :saksbehandler, :beslutter, p.id, CAST(:tilstand AS totrinnsvurdering_tilstand), :opprettet, null
8787
FROM person p
8888
WHERE p.fødselsnummer = :fodselsnummer
8989
""".trimIndent(),
9090
"vedtaksperiodeId" to totrinnsvurdering.vedtaksperiodeId,
91-
"erRetur" to totrinnsvurdering.erRetur,
9291
"saksbehandler" to totrinnsvurdering.saksbehandler?.value,
9392
"beslutter" to totrinnsvurdering.beslutter?.value,
9493
"fodselsnummer" to totrinnsvurdering.fødselsnummer,
94+
"tilstand" to totrinnsvurdering.tilstand.name,
9595
"opprettet" to totrinnsvurdering.opprettet,
9696
).updateAndReturnGeneratedKey()
9797

9898
private fun update(totrinnsvurdering: Totrinnsvurdering) {
9999
asSQL(
100100
"""
101101
UPDATE totrinnsvurdering
102-
SET er_retur = :erRetur,
103-
saksbehandler = :saksbehandler,
102+
SET saksbehandler = :saksbehandler,
104103
beslutter = :beslutter,
105104
utbetaling_id_ref = (SELECT id from utbetaling_id ui WHERE ui.utbetaling_id = :utbetalingId),
105+
tilstand = CAST(:tilstand AS totrinnsvurdering_tilstand),
106106
oppdatert = :oppdatert
107107
WHERE id = :id
108108
""".trimIndent(),
109109
"id" to totrinnsvurdering.id().value,
110-
"erRetur" to totrinnsvurdering.erRetur,
111110
"saksbehandler" to totrinnsvurdering.saksbehandler?.value,
112111
"beslutter" to totrinnsvurdering.beslutter?.value,
113112
"utbetalingId" to totrinnsvurdering.utbetalingId,
113+
"tilstand" to totrinnsvurdering.tilstand.name,
114114
"oppdatert" to totrinnsvurdering.oppdatert,
115115
).update()
116116
}
@@ -120,13 +120,12 @@ class PgTotrinnsvurderingRepository(session: Session) : QueryRunner by MedSessio
120120
id = TotrinnsvurderingId(long("id")),
121121
vedtaksperiodeId = uuid("vedtaksperiode_id"),
122122
fødselsnummer = string("fødselsnummer"),
123-
erRetur = boolean("er_retur"),
124123
saksbehandler = uuidOrNull("saksbehandler_oid")?.let(::SaksbehandlerOid),
125124
beslutter = uuidOrNull("beslutter_oid")?.let(::SaksbehandlerOid),
126125
utbetalingId = uuidOrNull("utbetaling_id"),
127126
opprettet = localDateTime("opprettet"),
128127
oppdatert = localDateTimeOrNull("oppdatert"),
129-
ferdigstilt = uuidOrNull("utbetaling_id") != null,
128+
tilstand = enumValueOf(string("tilstand")),
130129
overstyringer = overstyringRepository.finnAktive(string("fødselsnummer"), TotrinnsvurderingId(long("id"))),
131130
)
132131

@@ -136,13 +135,12 @@ class PgTotrinnsvurderingRepository(session: Session) : QueryRunner by MedSessio
136135
id = TotrinnsvurderingId(long("id")),
137136
vedtaksperiodeId = uuid("vedtaksperiode_id"),
138137
fødselsnummer = string("fødselsnummer"),
139-
erRetur = boolean("er_retur"),
140138
saksbehandler = uuidOrNull("saksbehandler_oid")?.let(::SaksbehandlerOid),
141139
beslutter = uuidOrNull("beslutter_oid")?.let(::SaksbehandlerOid),
142140
utbetalingId = uuidOrNull("utbetaling_id"),
143141
opprettet = localDateTime("opprettet"),
144142
oppdatert = localDateTimeOrNull("oppdatert"),
145-
ferdigstilt = uuidOrNull("utbetaling_id") != null,
143+
tilstand = enumValueOf(string("tilstand")),
146144
overstyringer = overstyringRepository.finnAktive(string("fødselsnummer")),
147145
)
148146
}

0 commit comments

Comments
 (0)