Skip to content

Commit d682141

Browse files
committed
Merge branch 'main' into begrunnelse-meldekort
2 parents a76694d + de85a43 commit d682141

File tree

4 files changed

+37
-18
lines changed

4 files changed

+37
-18
lines changed

app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/meldekort/domene/MeldekortBehandling.kt

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ import no.nav.tiltakspenger.libs.common.Saksbehandler
1111
import no.nav.tiltakspenger.libs.common.nå
1212
import no.nav.tiltakspenger.libs.periodisering.Periode
1313
import no.nav.tiltakspenger.libs.periodisering.Periodisering
14-
import no.nav.tiltakspenger.libs.periodisering.overlappendePerioder
1514
import no.nav.tiltakspenger.libs.tiltak.TiltakstypeSomGirRett
1615
import no.nav.tiltakspenger.saksbehandling.felles.Navkontor
17-
import no.nav.tiltakspenger.saksbehandling.felles.singleOrNullOrThrow
1816
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlingStatus.GODKJENT
1917
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlingStatus.IKKE_BEHANDLET
2018
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlingStatus.IKKE_RETT_TIL_TILTAKSPENGER
@@ -335,30 +333,39 @@ fun Sak.opprettMeldekortBehandling(
335333
saksbehandler: Saksbehandler,
336334
clock: Clock,
337335
): MeldekortBehandling.MeldekortUnderBehandling {
338-
require(this.vedtaksliste.innvilgelsesperioder.isNotEmpty()) {
339-
"Må ha minst én periode som gir rett til tiltakspenger for å opprette meldekortbehandling"
336+
if (this.meldekortBehandlinger.finnesÅpenMeldekortBehandling) {
337+
throw IllegalStateException("Kan ikke opprette ny meldekortbehandling før forrige er avsluttet for sak $id og kjedeId $kjedeId")
340338
}
341-
342-
val forrigeMeldekortBehandling = hentSisteMeldekortBehandlingForKjede(kjedeId)?.also {
343-
require(it.status == GODKJENT) {
344-
"Forrige meldekortbehandling i kjeden må være godkjent for å opprette en ny behandling/korrigering (kjede $kjedeId på sak ${this.id})"
339+
val meldeperiodekjede: MeldeperiodeKjede = this.meldeperiodeKjeder.hentMeldeperiodekjedeForKjedeId(kjedeId)
340+
?: throw IllegalStateException("Kan ikke opprette meldekortbehandling for kjedeId $kjedeId som ikke finnes")
341+
val meldeperiode: Meldeperiode = meldeperiodekjede.hentSisteMeldeperiode()
342+
val behandlingerKnyttetTilKjede = this.meldekortBehandlinger.hentMeldekortBehandlingerForKjede(kjedeId)
343+
344+
if (this.meldekortBehandlinger.isEmpty()) {
345+
require(meldeperiode == this.meldeperiodeKjeder.first().hentSisteMeldeperiode()) {
346+
"Dette er første meldekortbehandling på saken og må da behandle den første meldeperiode kjeden. sakId: ${this.id}, meldeperiodekjedeId: ${meldeperiodekjede.kjedeId}"
347+
}
348+
}
349+
val foregåendeMeldeperiodekjede = this.meldeperiodeKjeder.hentForegåendeMeldeperiodekjede(kjedeId)
350+
foregåendeMeldeperiodekjede?.also { foregåendeMeldeperiodekjede ->
351+
this.meldekortBehandlinger.hentMeldekortBehandlingerForKjede(foregåendeMeldeperiodekjede.kjedeId).also {
352+
if (it.none { it.status == GODKJENT }) {
353+
throw IllegalStateException("Kan ikke opprette ny meldekortbehandling før forrige kjede er godkjent")
354+
}
345355
}
346356
}
347-
val meldekortId = MeldekortId.random()
348-
val meldeperiode = hentSisteMeldeperiodeForKjede(kjedeId)
349-
350-
val overlappendePeriode = this.vedtaksliste.innvilgelsesperioder.overlappendePerioder(
351-
listOf(meldeperiode.periode),
352-
).singleOrNullOrThrow()
353357

354-
requireNotNull(overlappendePeriode) { "Meldeperioden må overlappe med innvilgelsesperioden(e)" }
358+
if (meldeperiode.ingenDagerGirRett) {
359+
throw IllegalStateException("Kan ikke starte behandling på meldeperiode uten dager som gir rett til tiltakspenger")
360+
}
355361

356362
// TODO abn: må støtte flere brukers meldekort på samme kjede før vi åpner for korrigering fra bruker
357363
val brukersMeldekort = this.brukersMeldekort.find { it.kjedeId == kjedeId }
358364

359365
val type =
360-
if (forrigeMeldekortBehandling == null) MeldekortBehandlingType.FØRSTE_BEHANDLING else MeldekortBehandlingType.KORRIGERING
366+
if (behandlingerKnyttetTilKjede.isEmpty()) MeldekortBehandlingType.FØRSTE_BEHANDLING else MeldekortBehandlingType.KORRIGERING
361367

368+
val meldekortId = MeldekortId.random()
362369
return MeldekortBehandling.MeldekortUnderBehandling(
363370
id = meldekortId,
364371
sakId = this.id,

app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/meldekort/domene/MeldekortBehandlinger.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ data class MeldekortBehandlinger(
153153

154154
val sakId: SakId by lazy { verdi.first().sakId }
155155

156+
val finnesÅpenMeldekortBehandling: Boolean by lazy { meldekortUnderBehandling.isNotEmpty() }
157+
156158
/**
157159
* Erstatt eksisterende meldekortbehandling med ny meldekortbehandling.
158160
*/

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ data class MeldeperiodeKjeder(
166166
val utfallsperiodeCount = nærmesteMeldeperiode.tilDager().count {
167167
(utfallsperioder.hentVerdiForDag(it) == Utfallsperiode.RETT_TIL_TILTAKSPENGER)
168168
}
169-
val antallDagerSomGirRettForMeldePeriode = min(utfallsperiodeCount, MAKS_DAGER_MED_TILTAKSPENGER_FOR_PERIODE)
169+
val antallDagerSomGirRettForMeldePeriode =
170+
min(utfallsperiodeCount, MAKS_DAGER_MED_TILTAKSPENGER_FOR_PERIODE)
170171

171172
val kjede = this.hentMeldeperiodeKjedeForPeriode(nærmesteMeldeperiode)
172173
val versjon = kjede?.nesteVersjon() ?: HendelseVersjon.ny()
@@ -215,6 +216,15 @@ data class MeldeperiodeKjeder(
215216
return førstePeriode
216217
}
217218

219+
fun hentMeldeperiodekjedeForKjedeId(kjedeId: MeldeperiodeKjedeId): MeldeperiodeKjede? {
220+
return meldeperiodeKjeder.singleOrNullOrThrow { it.kjedeId == kjedeId }
221+
}
222+
223+
fun hentForegåendeMeldeperiodekjede(kjedeId: MeldeperiodeKjedeId): MeldeperiodeKjede? {
224+
meldeperiodeKjeder.zipWithNext { a, b -> if (b.kjedeId == kjedeId) return a }
225+
return null
226+
}
227+
218228
companion object {
219229
/**
220230
* Skal kun kalles/brukes på en sak som aldri har hatt en meldeperiode før

app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/repository/meldekort/MeldekortBehandlingRepoImplTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class MeldekortBehandlingRepoImplTest {
4545
val oppdatertSak = sakRepo.hentForSakId(sak.id)!!
4646

4747
val nesteMeldekort = oppdatertSak.opprettMeldekortBehandling(
48-
oppdatertSak.meldeperiodeKjeder.last().kjedeId,
48+
oppdatertSak.meldeperiodeKjeder[1].kjedeId,
4949
ObjectMother.navkontor(),
5050
ObjectMother.saksbehandler(),
5151
fixedClock,

0 commit comments

Comments
 (0)