Skip to content

Commit bfbfeac

Browse files
committed
opprydning av sak, behandling, og meldeperiodekjeder
1 parent 8381c1f commit bfbfeac

File tree

15 files changed

+62
-74
lines changed

15 files changed

+62
-74
lines changed

Diff for: app/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
val kotlinxCoroutinesVersion = "1.10.1"
22
val kotestVersion = "5.9.1"
3-
val felleslibVersion = "0.0.403"
3+
val felleslibVersion = "0.0.406"
44
val mockkVersion = "1.13.17"
55
val ktorVersion = "3.1.1"
66
val testContainersVersion = "1.20.6"

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/meldekort/domene/MeldeperiodeKjeder.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import no.nav.tiltakspenger.libs.common.MeldeperiodeKjedeId
99
import no.nav.tiltakspenger.libs.common.SakId
1010
import no.nav.tiltakspenger.libs.common.nonDistinctBy
1111
import no.nav.tiltakspenger.libs.periodisering.Periode
12+
import no.nav.tiltakspenger.libs.periodisering.overlapperIkke
1213
import no.nav.tiltakspenger.saksbehandling.felles.singleOrNullOrThrow
1314
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.sak.Saksnummer
1415
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.vedtak.Vedtaksliste
@@ -203,9 +204,6 @@ data class MeldeperiodeKjeder(
203204
}
204205

205206
companion object {
206-
fun List<Periode>.overlapper(periode: Periode): Boolean = this.any { it.overlapperMed(periode) }
207-
fun List<Periode>.overlapperIkke(periode: Periode): Boolean = !this.any { it.overlapperMed(periode) }
208-
209207
/**
210208
* Skal kun kalles/brukes på en sak som aldri har hatt en meldeperiode før
211209
*/

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/repository/sak/SakPostgresRepo.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,7 @@ internal class SakPostgresRepo(
201201
return sessionContext.withSession { session ->
202202
val behandlinger = BehandlingPostgresRepo.hentForSakId(id, session)
203203
val vedtaksliste: Vedtaksliste = RammevedtakPostgresRepo.hentForSakId(id, session)
204-
val meldekortBehandlinger = vedtaksliste.førstegangsvedtak?.let {
205-
MeldekortBehandlingPostgresRepo.hentForSakId(id, session)
206-
} ?: MeldekortBehandlinger.empty()
204+
val meldekortBehandlinger = MeldekortBehandlingPostgresRepo.hentForSakId(id, session) ?: MeldekortBehandlinger.empty()
207205
val meldeperioder = MeldeperiodePostgresRepo.hentForSakId(id, session)
208206
val soknader = SøknadDAO.hentForSakId(id, session)
209207
Sak(

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/behandling/Behandling.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.tiltak.ValgteTi
2727
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.vilkår.Utfallsperiode
2828
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.vilkår.Utfallsperiode.IKKE_RETT_TIL_TILTAKSPENGER
2929
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.vilkår.Utfallsperiode.RETT_TIL_TILTAKSPENGER
30+
import java.time.LocalDate
3031
import java.time.LocalDateTime
3132

3233
/**
@@ -253,7 +254,7 @@ data class Behandling(
253254

254255
fun sendRevurderingTilBeslutning(
255256
kommando: SendRevurderingTilBeslutningKommando,
256-
vedtaksperiode: Periode,
257+
sisteDagSomGirRett: LocalDate,
257258
): Behandling {
258259
check(status == UNDER_BEHANDLING) {
259260
"Behandlingen må være under behandling, det innebærer også at en saksbehandler må ta saken før den kan sendes til beslutter. Behandlingsstatus: ${this.status}. Utøvende saksbehandler: $saksbehandler. Saksbehandler på behandling: ${this.saksbehandler}"
@@ -264,7 +265,7 @@ data class Behandling(
264265
status = if (beslutter == null) KLAR_TIL_BESLUTNING else UNDER_BESLUTNING,
265266
sendtTilBeslutning = nå(),
266267
begrunnelseVilkårsvurdering = kommando.begrunnelse,
267-
virkningsperiode = Periode(kommando.stansDato, vedtaksperiode.tilOgMed),
268+
virkningsperiode = Periode(kommando.stansDato, sisteDagSomGirRett),
268269
)
269270
}
270271

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/behandling/SakBehandlingEx.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fun Sak.sendRevurderingTilBeslutning(
4747

4848
val behandling: Behandling = this.hentBehandling(kommando.behandlingId)!!
4949
require(behandling.erRevurdering) { "Finnes egen funksjon for å sende til førstegangbehandling til beslutning" }
50-
val oppdatertBehandling = behandling.sendRevurderingTilBeslutning(kommando, this.vedtaksperiode!!)
50+
val oppdatertBehandling = behandling.sendRevurderingTilBeslutning(kommando, this.vedtaksliste.sisteDagSomGirRett!!)
5151

5252
return oppdatertBehandling.right()
5353
}

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/behandling/SakRevurderingEx.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ suspend fun Sak.startRevurdering(
3232
"Kan kun opprette en stansrevurdering dersom vi har en sammenhengende innvilgelsesperiode. sakId=${this.id}"
3333
}
3434

35-
requireNotNull(this.ikkeAvbruttFørstegangsbehandlinger) { "Kan ikke opprette revurdering uten en førstegangsbehandling" }
36-
37-
val saksopplysningsperiode = this.førsteSaksopplysningsperiode!!
35+
// TODO - dette gjelder bare så lenge dette er en stans revurdering
36+
// Her har vi ikke valgt revurderingsperioden, men revurderingsperioden kan aldri være større enn innvilgelseprioden
37+
val saksopplysningsperiode = this.vedtaksliste.innvilgelsesperiode!!
3838

3939
val revurdering = Behandling.opprettRevurdering(
4040
sakId = this.id,

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/sak/Sak.kt

+12-18
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import no.nav.tiltakspenger.libs.periodisering.Periodisering
1111
import no.nav.tiltakspenger.libs.tiltak.TiltakstypeSomGirRett
1212
import no.nav.tiltakspenger.saksbehandling.barnetillegg.AntallBarn
1313
import no.nav.tiltakspenger.saksbehandling.felles.Navkontor
14-
import no.nav.tiltakspenger.saksbehandling.felles.min
1514
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.BrukersMeldekort
1615
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandling
1716
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlinger
@@ -40,26 +39,15 @@ data class Sak(
4039
val utbetalinger: Utbetalinger,
4140
val soknader: List<Søknad>,
4241
) {
43-
/** Nåtilstand. Dette er sakens totale vedtaksperiode. Vær veldig obs når du bruker denne, fordi den sier ikke noe om antall perioder, om de gir rett eller ikke. */
44-
val vedtaksperiode: Periode? = vedtaksliste.vedtaksperiode
45-
4642
/** Nåtilstand. Tar utgangspunkt i tidslinja på saken og henter den siste innvilget dagen. */
4743
val førsteDagSomGirRett = vedtaksliste.førsteDagSomGirRett
4844

4945
/** Nåtilstand. Tar utgangspunkt i tidslinja på saken og henter den siste innvilget dagen. */
5046
@Suppress("unused")
5147
val sisteDagSomGirRett = vedtaksliste.sisteDagSomGirRett
5248

53-
/**
54-
* En sak kan kun ha en førstegangsbehandling, dersom perioden til den vedtatte førstegangsbehandlingen skal utvides eller minskes (den må fortsatt være sammenhengende) må vi revurdere/omgjøre, ikke førstegangsbehandle på nytt.
55-
* Dersom den nye søknaden ikke overlapper eller tilstøter den gamle perioden, må vi opprette en ny sak som får en ny førstegangsbehandling.
56-
*/
57-
val ikkeAvbruttFørstegangsbehandlinger: List<Behandling> = behandlinger.ikkeAvbrutteFørstegangsbehandlinger
5849
val revurderinger = behandlinger.revurderinger
5950

60-
val førsteSaksopplysningsperiode: Periode? =
61-
ikkeAvbruttFørstegangsbehandlinger.firstOrNull()?.saksopplysningsperiode
62-
6351
/** Henter fra siste godkjente meldekort */
6452
@Suppress("unused")
6553
val sisteNavkontor: Navkontor? by lazy {
@@ -107,12 +95,18 @@ data class Sak(
10795

10896
fun sisteUtbetalteMeldekortDag(): LocalDate? = meldekortBehandlinger.sisteUtbetalteMeldekortDag
10997

110-
/**
111-
* Vil være innenfor [vedtaksperiode]. Dersom vi ikke har et vedtak, vil den være null.
112-
*/
113-
fun førsteLovligeStansdato(): LocalDate? = sisteUtbetalteMeldekortDag()?.plusDays(1)?.let {
114-
min(it, vedtaksperiode!!.tilOgMed)
115-
} ?: vedtaksperiode?.fraOgMed
98+
fun førsteLovligeStansdato(): LocalDate? {
99+
val innvilgelsesperioder = this.vedtaksliste.innvilgelsesperioder
100+
if (innvilgelsesperioder.isEmpty()) return null
101+
val førsteDagSomIkkeErUtbetalt =
102+
sisteUtbetalteMeldekortDag()?.plusDays(1) ?: innvilgelsesperioder.first().fraOgMed
103+
104+
return innvilgelsesperioder.firstOrNull {
105+
it.tilOgMed >= førsteDagSomIkkeErUtbetalt
106+
}?.tilDager()?.firstOrNull {
107+
it >= førsteDagSomIkkeErUtbetalt
108+
}
109+
}
116110

117111
fun erSisteVersjonAvMeldeperiode(meldeperiode: Meldeperiode): Boolean {
118112
return meldeperiodeKjeder.erSisteVersjonAvMeldeperiode(meldeperiode)

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/vedtak/Rammevedtak.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ fun Sak.utledVedtakstype(behandling: Behandling): Vedtakstype {
114114
Behandlingstype.REVURDERING -> {
115115
// Kommentar jah: Dette er en førsteimplementasjon for å avgjøre om dette er et stansvedtak. Ved andre typer revurderinger må vi utvide denne.
116116
if (behandling.virkningsperiode!!.tilOgMed != this.utfallsperioder().totalePeriode.tilOgMed) {
117-
throw IllegalStateException("Kan ikke lage stansvedtak for revurdering - revurderingens tilOgMed (${behandling.virkningsperiode.tilOgMed}) må være lik sakens tilOgMed (${this.vedtaksperiode!!.tilOgMed})")
117+
throw IllegalStateException("Kan ikke lage stansvedtak for revurdering - revurderingens tilOgMed (${behandling.virkningsperiode.tilOgMed}) må være lik sakens tilOgMed (${this.utfallsperioder().totalePeriode.tilOgMed})")
118118
}
119119

120120
if (this.sisteUtbetalteMeldekortDag() == null || this.sisteUtbetalteMeldekortDag()!! < behandling.virkningsperiode.fraOgMed) {

Diff for: app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/vedtak/Vedtaksliste.kt

-6
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,11 @@ data class Vedtaksliste(
2323

2424
val tidslinje: Periodisering<Rammevedtak?> by lazy { value.toTidslinjeMedHull() }
2525

26-
val førstegangsvedtak: List<Rammevedtak> by lazy { value.filter { it.erFørstegangsvedtak } }
27-
28-
/** Nåtilstand. Dette er sakens totale vedtaksperiode. Vær veldig obs når du bruker denne, fordi den sier ikke noe om antall perioder, om de gir rett eller ikke. */
29-
val vedtaksperiode: Periode? by lazy { tidslinje.ifEmpty { null }?.totalePeriode }
30-
3126
val innvilgelsesperiode: Periode? by lazy {
3227
innvilgelsesperioder.ifEmpty { null }?.let { Periode(it.minOf { it.fraOgMed }, it.maxOf { it.tilOgMed }) }
3328
}
3429

3530
/** Nåtilstand. Sakens totale vedtaksperioder. Vil kunne ha hull dersom det f.eks. er opphold mellom 2 tiltaksdeltagelsesperioder. Avslag og delvis avslag vil ikke være med her. */
36-
@Suppress("unused")
3731
val vedtaksperioder: List<Periode> by lazy { tidslinje.perioder }
3832

3933
/** Nåtilstand. De periodene som gir rett til tiltakspenger. Vil kunne være hull. */

Diff for: app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/db/TestDataHelperBehandlingEx.kt

+14-9
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ internal fun TestDataHelper.persisterOpprettetFørstegangsbehandling(
6767
saksnummer = sak.saksnummer,
6868
),
6969
barnetillegg: Barnetillegg? = null,
70-
): Pair<Sak, Søknad> {
70+
): Triple<Sak, Behandling, Søknad> {
7171
this.persisterSakOgSøknad(
7272
fnr = sak.fnr,
7373
søknad = søknad,
@@ -83,10 +83,11 @@ internal fun TestDataHelper.persisterOpprettetFørstegangsbehandling(
8383
sakId = sak.id,
8484
barnetillegg = barnetillegg,
8585
)
86-
behandlingRepo.lagre(sakMedBehandling.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!)
86+
behandlingRepo.lagre(sakMedBehandling.behandlinger.singleOrNullOrThrow()!!)
8787

88-
return Pair(
88+
return Triple(
8989
sakRepo.hentForSakId(sakId)!!,
90+
sakMedBehandling.behandlinger.singleOrNullOrThrow()!!,
9091
søknadRepo.hentForSøknadId(søknad.id)!!,
9192
)
9293
}
@@ -137,7 +138,7 @@ internal fun TestDataHelper.persisterAvbruttFørstegangsbehandling(
137138
søknad = søknad,
138139
sak = sak,
139140
)
140-
val førstegangsbehandling = sakMedFørstegangsbehandling.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!
141+
val førstegangsbehandling = sakMedFørstegangsbehandling.behandlinger.singleOrNullOrThrow()!!
141142
val avbruttBehandling = førstegangsbehandling.avbryt(
142143
saksbehandler,
143144
"begrunnelse",
@@ -184,8 +185,8 @@ internal fun TestDataHelper.persisterIverksattFørstegangsbehandling(
184185
saksnummer = sak.saksnummer,
185186
),
186187
correlationId: CorrelationId = CorrelationId.generate(),
187-
): Pair<Sak, Rammevedtak> {
188-
val (sak, _) = persisterOpprettetFørstegangsbehandling(
188+
): Triple<Sak, Rammevedtak, Behandling> {
189+
val (sak, førstegangsbehandling) = persisterOpprettetFørstegangsbehandling(
189190
sakId = sak.id,
190191
fnr = sak.fnr,
191192
deltakelseFom = deltakelseFom,
@@ -197,7 +198,6 @@ internal fun TestDataHelper.persisterIverksattFørstegangsbehandling(
197198
søknad = søknad,
198199
sak = sak,
199200
)
200-
val førstegangsbehandling = sak.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!
201201
val oppdatertFørstegangsbehandling =
202202
førstegangsbehandling
203203
.tilBeslutning(
@@ -210,15 +210,20 @@ internal fun TestDataHelper.persisterIverksattFørstegangsbehandling(
210210
begrunnelseVilkårsvurdering = BegrunnelseVilkårsvurdering("begrunnelseVilkårsvurdering"),
211211
innvilgelsesperiode = tiltaksOgVurderingsperiode,
212212
barnetillegg = null,
213-
tiltaksdeltakelser = listOf(Pair(tiltaksOgVurderingsperiode, førstegangsbehandling.saksopplysninger.tiltaksdeltagelse.first().eksternDeltagelseId)),
213+
tiltaksdeltakelser = listOf(
214+
Pair(
215+
tiltaksOgVurderingsperiode,
216+
førstegangsbehandling.saksopplysninger.tiltaksdeltagelse.first().eksternDeltagelseId,
217+
),
218+
),
214219
),
215220
)
216221
.taBehandling(beslutter)
217222
.iverksett(beslutter, ObjectMother.godkjentAttestering(beslutter))
218223
behandlingRepo.lagre(oppdatertFørstegangsbehandling)
219224
val vedtak = sak.opprettVedtak(oppdatertFørstegangsbehandling).second
220225
vedtakRepo.lagre(vedtak)
221-
return sakRepo.hentForSakId(sakId)!! to vedtak
226+
return Triple(sakRepo.hentForSakId(sakId)!!, vedtak, oppdatertFørstegangsbehandling)
222227
}
223228

224229
/**

Diff for: app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/objectmothers/BehandlingMother.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ suspend fun TestApplicationContext.førstegangsbehandlingTilBeslutter(
297297
this.behandlingContext.sendBehandlingTilBeslutningService.sendFørstegangsbehandlingTilBeslutning(
298298
SendSøknadsbehandlingTilBeslutningKommando(
299299
sakId = sakMedFørstegangsbehandling.id,
300-
behandlingId = sakMedFørstegangsbehandling.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.id,
300+
behandlingId = sakMedFørstegangsbehandling.behandlinger.singleOrNullOrThrow()!!.id,
301301
saksbehandler = saksbehandler,
302302
correlationId = correlationId,
303303
fritekstTilVedtaksbrev = fritekstTilVedtaksbrev,
@@ -307,7 +307,7 @@ suspend fun TestApplicationContext.førstegangsbehandlingTilBeslutter(
307307
tiltaksdeltakelser = listOf(
308308
Pair(
309309
periode,
310-
sakMedFørstegangsbehandling.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.saksopplysninger.tiltaksdeltagelse.first().eksternDeltagelseId,
310+
sakMedFørstegangsbehandling.behandlinger.singleOrNullOrThrow()!!.saksopplysninger.tiltaksdeltagelse.first().eksternDeltagelseId,
311311
),
312312
),
313313
),
@@ -332,7 +332,7 @@ suspend fun TestApplicationContext.førstegangsbehandlingUnderBeslutning(
332332
saksbehandler = saksbehandler,
333333
)
334334
this.behandlingContext.behandlingService.taBehandling(
335-
vilkårsvurdert.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.id,
335+
vilkårsvurdert.behandlinger.singleOrNullOrThrow()!!.id,
336336
beslutter,
337337
correlationId = correlationId,
338338
)
@@ -359,7 +359,7 @@ suspend fun TestApplicationContext.førstegangsbehandlingIverksatt(
359359
)
360360
runBlocking {
361361
tac.behandlingContext.iverksettBehandlingService.iverksett(
362-
behandlingId = underBeslutning.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.id,
362+
behandlingId = underBeslutning.behandlinger.singleOrNullOrThrow()!!.id,
363363
beslutter = beslutter,
364364
correlationId = correlationId,
365365
sakId = underBeslutning.id,

Diff for: app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/repository/behandling/BehandlingRepoTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ internal class BehandlingRepoTest {
3030

3131
val (sak, _) = testDataHelper.persisterOpprettetFørstegangsbehandling()
3232
sakRepo.hentForSakId(sak.id) shouldBe sak
33-
behandlingRepo.hent(sak.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.id) shouldBe sak.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()
33+
behandlingRepo.hent(sak.behandlinger.singleOrNullOrThrow()!!.id) shouldBe sak.behandlinger.singleOrNullOrThrow()
3434
}
3535
}
3636

@@ -53,8 +53,8 @@ internal class BehandlingRepoTest {
5353
),
5454
)
5555
sakRepo.hentForSakId(sak.id) shouldBe sak
56-
behandlingRepo.hent(sak.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()!!.id).also {
57-
it shouldBe sak.ikkeAvbruttFørstegangsbehandlinger.singleOrNullOrThrow()
56+
behandlingRepo.hent(sak.behandlinger.singleOrNullOrThrow()!!.id).also {
57+
it shouldBe sak.behandlinger.singleOrNullOrThrow()
5858
it.barnetillegg shouldNotBe null
5959
}
6060
}
@@ -80,8 +80,8 @@ internal class BehandlingRepoTest {
8080
val (sak1, _) = testDataHelper.persisterOpprettetFørstegangsbehandling()
8181
val (sak2, _) = testDataHelper.persisterOpprettetFørstegangsbehandling()
8282

83-
behandlingRepo.hentAlleForFnr(sak1.fnr) shouldBe sak1.ikkeAvbruttFørstegangsbehandlinger
84-
behandlingRepo.hentAlleForFnr(sak2.fnr) shouldBe sak2.ikkeAvbruttFørstegangsbehandlinger
83+
behandlingRepo.hentAlleForFnr(sak1.fnr) shouldBe sak1.behandlinger
84+
behandlingRepo.hentAlleForFnr(sak2.fnr) shouldBe sak2.behandlinger
8585
}
8686
}
8787
}

0 commit comments

Comments
 (0)