Skip to content

Commit 06e9604

Browse files
committed
Tweaker init-sjekker, kommentarer, navngivning
1 parent fb0f67c commit 06e9604

File tree

10 files changed

+96
-63
lines changed

10 files changed

+96
-63
lines changed

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

+6-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ private const val ANTALL_EGENMELDINGSDAGER = 3
3131
private const val ANTALL_ARBEIDSGIVERDAGER = 13
3232
private const val DAGER_KARANTENE = 16L - 1
3333

34-
private data class MeldekortBeregning(
34+
private data class BeregnMeldekort(
3535
val kommando: SendMeldekortTilBeslutningKommando,
3636
val eksisterendeMeldekortBehandlinger: MeldekortBehandlinger,
3737
val barnetilleggsPerioder: Periodisering<AntallBarn?>,
@@ -65,13 +65,14 @@ private data class MeldekortBeregning(
6565
}
6666

6767
/** Returnerer beregnede dager fra kommando, og evt omberegninger for relevante meldeperioder på saken */
68-
fun beregn(): Pair<NonEmptyList<MeldeperiodeBeregningDag.Utfylt>, List<MeldeperiodeBeregning.MeldeperiodeOmberegnet>> {
68+
fun beregn(): Pair<NonEmptyList<MeldeperiodeBeregningDag.Utfylt>, List<MeldekortBeregning.MeldeperiodeOmberegnet>> {
6969
val oppdatertFraOgMed = kommando.dager.first().dag
7070
val oppdatertKjedeId = eksisterendeMeldekortBehandlinger
7171
.hentMeldekortBehandling(kommando.meldekortId)!!
7272
.kjedeId
7373

74-
val (eksisterendeMeldekortFør, eksisterendeMeldekortEtter) = eksisterendeMeldekortBehandlinger.sisteBehandledeMeldekortPerKjede
74+
val (eksisterendeMeldekortFør, eksisterendeMeldekortEtter) = eksisterendeMeldekortBehandlinger
75+
.sisteBehandledeMeldekortPerKjede
7576
.filterNot { it.kjedeId == oppdatertKjedeId }
7677
.partition { it.periode.fraOgMed < oppdatertFraOgMed }
7778

@@ -89,7 +90,7 @@ private data class MeldekortBeregning(
8990
return@mapNotNull null
9091
}
9192

92-
MeldeperiodeBeregning.MeldeperiodeOmberegnet(
93+
MeldekortBeregning.MeldeperiodeOmberegnet(
9394
kjedeId = meldekort.kjedeId,
9495
dager = oppdaterteDager,
9596
)
@@ -458,7 +459,7 @@ fun SendMeldekortTilBeslutningKommando.beregn(
458459
eksisterendeMeldekortBehandlinger: MeldekortBehandlinger,
459460
barnetilleggsPerioder: Periodisering<AntallBarn?>,
460461
tiltakstypePerioder: Periodisering<TiltakstypeSomGirRett?>,
461-
) = MeldekortBeregning(
462+
) = BeregnMeldekort(
462463
kommando = this,
463464
barnetilleggsPerioder = barnetilleggsPerioder,
464465
tiltakstypePerioder = tiltakstypePerioder,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import java.time.LocalDateTime
1212

1313
/**
1414
* saksbehandling-api er ikke master for brukers meldekort, så i førsteomgang legger vi ikke på begrensninger i [InnmeldtStatus] her, det må ligge i meldekort-api.
15-
* Hvis vi ønsker en slik sperre, kan vi legge den i [MeldekortBehandling] eller [MeldeperiodeBeregning]
15+
* Hvis vi ønsker en slik sperre, kan vi legge den i [MeldekortBehandling] eller [MeldekortBeregning]
1616
*
1717
* @param id Unik identifikator for denne utfyllingen/innsendingen.
1818
* @param meldeperiode En gitt versjon av meldeperioden, slik som den var da bruker sendte inn meldekortet.

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

+21-15
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,22 @@ sealed interface MeldekortBehandling {
2929
val saksnummer: Saksnummer
3030
val fnr: Fnr
3131
val opprettet: LocalDateTime
32-
val beregning: MeldeperiodeBeregning
32+
val beregning: MeldekortBeregning
3333
val meldeperiode: Meldeperiode
3434
val type: MeldekortBehandlingType
3535

3636
/** Vil kunne være null dersom vi ikke har mottatt et meldekort via vår digitale flate. Bør på sikt kunne være en liste? */
3737
val brukersMeldekort: BrukersMeldekort?
3838

39-
val fraOgMed: LocalDate get() = beregning.fraOgMed
40-
val tilOgMed: LocalDate get() = beregning.tilOgMed
39+
/**
40+
* Perioden for beregningen av meldekortet.
41+
* Fra og med start av meldeperioden, til og med siste dag med en beregnet utbetaling
42+
* Ved korrigeringer tilbake i tid kan tilOgMed strekke seg til påfølgende meldeperioder dersom disse påvirkes av beregningen
43+
* */
4144
val periode: Periode get() = beregning.periode
45+
val fraOgMed: LocalDate get() = periode.fraOgMed
46+
val tilOgMed: LocalDate get() = periode.tilOgMed
47+
4248
val saksbehandler: String
4349
val beslutter: String?
4450
val status: MeldekortBehandlingStatus
@@ -93,7 +99,7 @@ sealed interface MeldekortBehandling {
9399
is MeldekortUnderBehandling -> this.copy(
94100
meldeperiode = meldeperiode,
95101
ikkeRettTilTiltakspengerTidspunkt = ikkeRettTilTiltakspengerTidspunkt,
96-
beregning = MeldeperiodeBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
102+
beregning = MeldekortBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
97103
meldeperiode = meldeperiode,
98104
meldekortId = this.id,
99105
sakId = this.sakId,
@@ -116,7 +122,7 @@ sealed interface MeldekortBehandling {
116122
override val saksnummer: Saksnummer,
117123
override val fnr: Fnr,
118124
override val opprettet: LocalDateTime,
119-
override val beregning: MeldeperiodeBeregning.UtfyltMeldeperiode,
125+
override val beregning: MeldekortBeregning.UtfyltMeldeperiode,
120126
override val saksbehandler: String,
121127
override val sendtTilBeslutning: LocalDateTime?,
122128
override val beslutter: String?,
@@ -196,7 +202,7 @@ sealed interface MeldekortBehandling {
196202
saksnummer = this.saksnummer,
197203
fnr = this.fnr,
198204
opprettet = this.opprettet,
199-
beregning = MeldeperiodeBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
205+
beregning = MeldekortBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
200206
meldeperiode = meldeperiode,
201207
tiltakstypePerioder = tiltakstypePerioder,
202208
meldekortId = this.id,
@@ -223,7 +229,7 @@ sealed interface MeldekortBehandling {
223229
override val saksnummer: Saksnummer,
224230
override val fnr: Fnr,
225231
override val opprettet: LocalDateTime,
226-
override val beregning: MeldeperiodeBeregning.IkkeUtfyltMeldeperiode,
232+
override val beregning: MeldekortBeregning.IkkeUtfyltMeldeperiode,
227233
override val navkontor: Navkontor,
228234
override val ikkeRettTilTiltakspengerTidspunkt: LocalDateTime?,
229235
override val brukersMeldekort: BrukersMeldekort?,
@@ -244,7 +250,7 @@ sealed interface MeldekortBehandling {
244250
override val beslutter = null
245251

246252
fun sendTilBeslutter(
247-
utfyltMeldeperiode: MeldeperiodeBeregning.UtfyltMeldeperiode,
253+
utfyltMeldeperiode: MeldekortBeregning.UtfyltMeldeperiode,
248254
begrunnelse: MeldekortbehandlingBegrunnelse?,
249255
saksbehandler: Saksbehandler,
250256
clock: Clock,
@@ -339,14 +345,14 @@ fun Sak.opprettMeldekortBehandling(
339345
"Dette er første meldekortbehandling på saken og må da behandle den første meldeperiode kjeden. sakId: ${this.id}, meldeperiodekjedeId: ${meldeperiodekjede.kjedeId}"
340346
}
341347
}
342-
val foregåendeMeldeperiodekjede = this.meldeperiodeKjeder.hentForegåendeMeldeperiodekjede(kjedeId)
343-
foregåendeMeldeperiodekjede?.also { foregåendeMeldeperiodekjede ->
344-
this.meldekortBehandlinger.hentMeldekortBehandlingerForKjede(foregåendeMeldeperiodekjede.kjedeId).also {
345-
if (it.none { it.status == GODKJENT }) {
346-
throw IllegalStateException("Kan ikke opprette ny meldekortbehandling før forrige kjede er godkjent")
348+
this.meldeperiodeKjeder.hentForegåendeMeldeperiodekjede(kjedeId)
349+
?.also { foregåendeMeldeperiodekjede ->
350+
this.meldekortBehandlinger.hentMeldekortBehandlingerForKjede(foregåendeMeldeperiodekjede.kjedeId).also {
351+
if (it.none { it.status == GODKJENT }) {
352+
throw IllegalStateException("Kan ikke opprette ny meldekortbehandling før forrige kjede er godkjent")
353+
}
347354
}
348355
}
349-
}
350356

351357
if (meldeperiode.ingenDagerGirRett) {
352358
throw IllegalStateException("Kan ikke starte behandling på meldeperiode uten dager som gir rett til tiltakspenger")
@@ -371,7 +377,7 @@ fun Sak.opprettMeldekortBehandling(
371377
meldeperiode = meldeperiode,
372378
saksbehandler = saksbehandler.navIdent,
373379
type = type,
374-
beregning = MeldeperiodeBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
380+
beregning = MeldekortBeregning.IkkeUtfyltMeldeperiode.fraPeriode(
375381
meldeperiode = meldeperiode,
376382
meldekortId = meldekortId,
377383
sakId = this.id,

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import java.time.Clock
2222
import java.time.LocalDate
2323

2424
/**
25-
* Består av ingen, én eller flere [MeldeperiodeBeregning].
25+
* Består av ingen, én eller flere [MeldekortBeregning].
2626
* Vil være tom fram til første innvilgede førstegangsbehandling.
2727
* Kun den siste vil kunne være under behandling (åpen).
2828
*/
@@ -36,7 +36,9 @@ data class MeldekortBehandlinger(
3636
val sakId: SakId by lazy { verdi.first().sakId }
3737

3838
private val behandledeMeldekort: List<MeldekortBehandlet> by lazy { verdi.filterIsInstance<MeldekortBehandlet>() }
39+
3940
private val sisteMeldekortPerKjede: List<MeldekortBehandling> by lazy { verdi.groupBy { it.kjedeId }.values.map { it.last() } }
41+
4042
val sisteBehandledeMeldekortPerKjede: List<MeldekortBehandlet> by lazy { sisteMeldekortPerKjede.filterIsInstance<MeldekortBehandlet>() }
4143

4244
/** Under behandling er ikke-avsluttede meldekortbehandlinger som ikke er til beslutning. */
@@ -49,15 +51,17 @@ data class MeldekortBehandlinger(
4951
val sisteGodkjenteMeldekort: MeldekortBehandlet? by lazy { godkjenteMeldekort.lastOrNull() }
5052

5153
@Suppress("unused")
52-
val sisteGodkjenteMeldekortDag: LocalDate? by lazy { sisteGodkjenteMeldekort?.periode?.tilOgMed }
54+
val sisteGodkjenteMeldekortDag: LocalDate? by lazy { sisteGodkjenteMeldekort?.tilOgMed }
5355

5456
/** Merk at denne går helt tilbake til siste godkjente, utbetalte dag. Dette er ikke nødvendigvis den siste godkjente meldeperioden. */
5557
val sisteUtbetalteMeldekortDag: LocalDate? by lazy {
5658
godkjenteMeldekort.flatMap { it.beregning.dager }.lastOrNull { it.beløp > 0 }?.dato
5759
}
5860

59-
// TODO abn: Vi kan ikke stole på beregninger fra enkelt-dagene ettersom korrigeringer kan påvirke dager etter den korrigerte perioden
60-
/** Vil kun returnere hele meldekortperioder som er utfylt. Dersom siste meldekortperiode er delvis utfylt, vil ikke disse komme med. */
61+
/**
62+
* Vil kun returnere hele meldekortperioder som er utfylt. Dersom siste meldekortperiode er delvis utfylt, vil ikke disse komme med.
63+
* Obs: Vi kan ikke stole på beregninger fra disse dagene ettersom korrigeringer kan påvirke dager etter den korrigerte perioden
64+
* */
6165
val utfylteDager: List<MeldeperiodeBeregningDag.Utfylt> by lazy { sisteBehandledeMeldekortPerKjede.flatMap { it.beregning.dager } }
6266

6367
val finnesÅpenMeldekortBehandling: Boolean by lazy { meldekortUnderBehandling != null }

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

+29-7
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@ import java.time.LocalDate
1919
*
2020
* @property maksDagerMedTiltakspengerForPeriode Maks antall dager bruker kan få tiltakspenger i meldeperioden. 100% vil tilsvare 5 dager i uken.
2121
*/
22-
sealed interface MeldeperiodeBeregning : List<MeldeperiodeBeregningDag> {
23-
val fraOgMed: LocalDate get() = this.first().dato
24-
val tilOgMed: LocalDate get() = this.last().dato
25-
val periode: Periode get() = Periode(fraOgMed, tilOgMed)
22+
sealed interface MeldekortBeregning : List<MeldeperiodeBeregningDag> {
23+
val periode: Periode
2624
val sakId: SakId
2725
val meldekortId: MeldekortId
2826
val maksDagerMedTiltakspengerForPeriode: Int
@@ -42,14 +40,35 @@ sealed interface MeldeperiodeBeregning : List<MeldeperiodeBeregningDag> {
4240
override val sakId: SakId,
4341
override val maksDagerMedTiltakspengerForPeriode: Int,
4442
override val dager: NonEmptyList<MeldeperiodeBeregningDag.Utfylt>,
43+
/** Denne omfatter påfølgende meldeperioder der beregningen ble endret som følge av en korrigering */
4544
val meldeperioderOmberegnet: List<MeldeperiodeOmberegnet>,
46-
) : MeldeperiodeBeregning,
45+
) : MeldekortBeregning,
4746
List<MeldeperiodeBeregningDag> by dager {
47+
4848
override val meldekortId = dager.first().meldekortId
4949

50+
val fraOgMed: LocalDate get() = this.first().dato
51+
val tilOgMed = meldeperioderOmberegnet.lastOrNull()?.dager?.last()?.dato ?: this.last().dato
52+
override val periode = Periode(fraOgMed, tilOgMed)
53+
5054
init {
5155
dager.validerPeriode()
5256

57+
if (meldeperioderOmberegnet.isNotEmpty()) {
58+
val sisteDatoIMeldeperioden = dager.last().dato
59+
val førsteDatoOmberegnet = meldeperioderOmberegnet.first().dager.first().dato
60+
61+
require(førsteDatoOmberegnet > sisteDatoIMeldeperioden) {
62+
"Omberegnede meldeperioder må komme etter den utfylte meldeperioden - $førsteDatoOmberegnet er før $sisteDatoIMeldeperioden"
63+
}
64+
65+
require(
66+
meldeperioderOmberegnet.zipWithNext().all { (a, b) -> a.dager.last().dato < b.dager.first().dato },
67+
) {
68+
"Omberegnede meldeperioder må være sortert og ikke ha overlapp - $meldeperioderOmberegnet"
69+
}
70+
}
71+
5372
validerAntallDager().onLeft {
5473
throw IllegalArgumentException(
5574
"For mange dager utfylt - ${it.antallDagerUtfylt} var utfylt, maks antall for perioden er ${it.maksDagerMedTiltakspengerForPeriode}",
@@ -80,10 +99,13 @@ sealed interface MeldeperiodeBeregning : List<MeldeperiodeBeregningDag> {
8099
override val sakId: SakId,
81100
override val maksDagerMedTiltakspengerForPeriode: Int,
82101
override val dager: NonEmptyList<MeldeperiodeBeregningDag>,
83-
) : MeldeperiodeBeregning,
102+
) : MeldekortBeregning,
84103
List<MeldeperiodeBeregningDag> by dager {
85104

86105
override val meldekortId = dager.first().meldekortId
106+
val fraOgMed: LocalDate get() = this.first().dato
107+
val tilOgMed: LocalDate get() = this.last().dato
108+
override val periode = Periode(fraOgMed, tilOgMed)
87109

88110
fun settPeriodeTilSperret(periode: Periode): IkkeUtfyltMeldeperiode {
89111
return this.copy(
@@ -190,7 +212,7 @@ private fun List<MeldeperiodeBeregningDag>.validerPeriode() {
190212
}
191213

192214
/** Denne skal ikke kalles utenfra */
193-
private fun MeldeperiodeBeregning.validerAntallDager(): Either<KanIkkeSendeMeldekortTilBeslutning.ForMangeDagerUtfylt, Unit> {
215+
private fun MeldekortBeregning.validerAntallDager(): Either<KanIkkeSendeMeldekortTilBeslutning.ForMangeDagerUtfylt, Unit> {
194216
return if (antallDagerMedDeltattEllerFravær > this.maksDagerMedTiltakspengerForPeriode) {
195217
return KanIkkeSendeMeldekortTilBeslutning.ForMangeDagerUtfylt(
196218
maksDagerMedTiltakspengerForPeriode = this.maksDagerMedTiltakspengerForPeriode,

app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/repository/meldekort/MeldekortBehandlingPostgresRepo.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandling.
1717
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandling.MeldekortUnderBehandling
1818
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlingStatus
1919
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBehandlinger
20+
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortBeregning
2021
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldekortbehandlingBegrunnelse
21-
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.MeldeperiodeBeregning
2222
import no.nav.tiltakspenger.saksbehandling.meldekort.domene.tilMeldekortperioder
2323
import no.nav.tiltakspenger.saksbehandling.meldekort.ports.MeldekortBehandlingRepo
2424
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.sak.Saksnummer
@@ -78,7 +78,7 @@ class MeldekortBehandlingPostgresRepo(
7878
"sak_id" to meldekortBehandling.sakId.toString(),
7979
"opprettet" to meldekortBehandling.opprettet,
8080
"fra_og_med" to meldekortBehandling.fraOgMed,
81-
"til_og_med" to meldekortBehandling.periode.tilOgMed,
81+
"til_og_med" to meldekortBehandling.tilOgMed,
8282
"meldekortdager" to meldekortBehandling.beregning.tilMeldekortdagerDbJson(),
8383
"saksbehandler" to meldekortBehandling.saksbehandler,
8484
"beslutter" to meldekortBehandling.beslutter,
@@ -214,7 +214,7 @@ class MeldekortBehandlingPostgresRepo(
214214

215215
return when (val status = row.string("status").toMeldekortBehandlingStatus()) {
216216
MeldekortBehandlingStatus.GODKJENT, MeldekortBehandlingStatus.KLAR_TIL_BESLUTNING -> {
217-
val meldeperiodeBeregning = MeldeperiodeBeregning.UtfyltMeldeperiode(
217+
val meldekortBeregning = MeldekortBeregning.UtfyltMeldeperiode(
218218
sakId = sakId,
219219
maksDagerMedTiltakspengerForPeriode = maksDagerMedTiltakspengerForPeriode,
220220
dager = meldekortdager.tilUtfylteMeldekortDager(id),
@@ -228,7 +228,7 @@ class MeldekortBehandlingPostgresRepo(
228228
saksnummer = saksnummer,
229229
fnr = fnr,
230230
opprettet = opprettet,
231-
beregning = meldeperiodeBeregning,
231+
beregning = meldekortBeregning,
232232
saksbehandler = saksbehandler,
233233
sendtTilBeslutning = row.localDateTimeOrNull("sendt_til_beslutning"),
234234
beslutter = row.stringOrNull("beslutter"),
@@ -244,7 +244,7 @@ class MeldekortBehandlingPostgresRepo(
244244
}
245245
// TODO jah: Her blander vi sammen behandlingsstatus og om man har rett/ikke-rett. Det er mulig at man har startet en meldekortbehandling også endres statusen til IKKE_RETT_TIL_TILTAKSPENGER. Da vil behandlingen sånn som koden er nå implisitt avsluttes. Det kan hende vi bør endre dette når vi skiller grunnlag, innsending og behandling.
246246
MeldekortBehandlingStatus.IKKE_BEHANDLET, MeldekortBehandlingStatus.IKKE_RETT_TIL_TILTAKSPENGER -> {
247-
val beregning = MeldeperiodeBeregning.IkkeUtfyltMeldeperiode(
247+
val beregning = MeldekortBeregning.IkkeUtfyltMeldeperiode(
248248
sakId = sakId,
249249
maksDagerMedTiltakspengerForPeriode = maksDagerMedTiltakspengerForPeriode,
250250
dager = meldekortdager.tilIkkeUtfylteMeldekortDager(id),

0 commit comments

Comments
 (0)