Skip to content

Commit f407a93

Browse files
authored
Håndterer opphør gjennom overskriving av tidligere periode (#5126)
### 💰 Hva skal gjøres, og hvorfor? Etter litt testing i prod oppdaget jeg at `UtbetalingsTidslinjeService` ikke håndterer opphør ved overskriving av tidligere periode. Gitt en periode som løper fra 01.09.24 -> 01.09.35, skal en ny periode 01.09.24 -> 28.02.25 føre til at det det ikke løper noe fra og med 01.03.25. ### ✅ Checklist - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. - [x] Jeg har skrevet tester.
1 parent d3db4fa commit f407a93

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/økonomi/UtbetalingsTidslinjeService.kt

+13-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package no.nav.familie.ba.sak.integrasjoner.økonomi
33
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelseRepository
44
import no.nav.familie.ba.sak.kjerne.beregning.domene.utbetalingsoppdrag
55
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.transformasjon.beskjærTilOgMed
6+
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.transformasjon.beskjærTilOgMedEtter
67
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag
78
import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsperiode
89
import no.nav.familie.tidslinje.Periode
@@ -87,7 +88,11 @@ class UtbetalingsTidslinjeService(
8788
}
8889
kjederForFagsak.apply {
8990
kjederForUtbetalingsperioder.forEach { periodeId, (tidslinje, forrigePeriodeId, opphørsperiode) ->
90-
val gjeldendeTidslinje = kjederForFagsak.getOrDefault(forrigePeriodeId, tomTidslinje()).beskjærOgKorrigerPerioderVedOpphør(opphørsperiode)
91+
val gjeldendeTidslinje =
92+
kjederForFagsak
93+
.getOrDefault(forrigePeriodeId, tomTidslinje())
94+
.beskjærOgKorrigerPerioderVedOpphør(opphørsperiode)
95+
.beskjærTilOgMedEtterIkkeTomTidslinje(tidslinje)
9196

9297
// Sørger for at vi alltid tar med den siste perioden dersom det er overlapp.
9398
val nyGjeldendeTidslinje =
@@ -125,4 +130,11 @@ class UtbetalingsTidslinjeService(
125130
// Beskjærer tidslinje slik at alt etter opphørsdato forsvinner
126131
.beskjærTilOgMed(opphørsperiode.opphør!!.opphørDatoFom.minusDays(1))
127132
}
133+
134+
private fun Tidslinje<Utbetalingsperiode>.beskjærTilOgMedEtterIkkeTomTidslinje(tidslinje: Tidslinje<Utbetalingsperiode>): Tidslinje<Utbetalingsperiode> {
135+
if (tidslinje.erTom()) {
136+
return this
137+
}
138+
return this.beskjærTilOgMedEtter(tidslinje)
139+
}
128140
}

src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/økonomi/UtbetalingsTidslinjeServiceTest.kt

+59
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,65 @@ class UtbetalingsTidslinjeServiceTest {
332332
assertThat(perioderIAndreTidslinje[0].verdi.periodeId).isEqualTo(førstegangsbehandlingPeriode1Kjede2.periodeId)
333333
assertThat(perioderIAndreTidslinje[0].verdi.forrigePeriodeId).isEqualTo(førstegangsbehandlingPeriode1Kjede2.forrigePeriodeId)
334334
}
335+
336+
@Test
337+
fun `skal generere utbetalingstidslinjer for revurdering med opphør som følge av overskrevet andel`() {
338+
// Arrange
339+
val fagsak = lagFagsak()
340+
val førstegangsbehandling = lagBehandling(fagsak)
341+
val revurdering = lagBehandling(fagsak)
342+
343+
val revurderingPeriode3Kjede1 =
344+
lagUtbetalingsperiode(
345+
fom = førstegangsBehandlingPeriode1Kjede1.vedtakdatoFom,
346+
tom = førstegangsBehandlingPeriode1Kjede1.vedtakdatoTom.plusMonths(1),
347+
periodeId = 3,
348+
forrigePeriodeId = 1,
349+
behandlingId = revurdering.id,
350+
klassifisering = YtelseType.ORDINÆR_BARNETRYGD.klassifisering,
351+
beløp = BigDecimal.valueOf(500L),
352+
)
353+
354+
val utbetalingsoppdragRevurderingOpphørVedOverskriving =
355+
lagUtbetalingsoppdrag(
356+
avstemmingTidspunkt = LocalDateTime.of(2025, 3, 1, 0, 0, 0),
357+
utbetalingsperiode =
358+
listOf(
359+
revurderingPeriode3Kjede1,
360+
),
361+
)
362+
363+
every { tilkjentYtelseRepository.findByFagsak(fagsak.id) } returns
364+
listOf(
365+
lagTilkjentYtelse(behandling = førstegangsbehandling, utbetalingsoppdrag = objectMapper.writeValueAsString(lagUtbetalingsoppdragFørstegangsbehandling())),
366+
lagTilkjentYtelse(behandling = revurdering, utbetalingsoppdrag = objectMapper.writeValueAsString(utbetalingsoppdragRevurderingOpphørVedOverskriving)),
367+
)
368+
369+
// Act
370+
val utbetalingstidslinjer = utbetalingsTidslinjeService.genererUtbetalingstidslinjerForFagsak(fagsakId = fagsak.id)
371+
val førsteTidslinje = utbetalingsTidslinjeService.finnUtbetalingsTidslinjeForPeriodeId(førstePeriodeIdKjede1, utbetalingstidslinjer)
372+
val andreTidslinje = utbetalingsTidslinjeService.finnUtbetalingsTidslinjeForPeriodeId(førstePeriodeIdKjede2, utbetalingstidslinjer)
373+
374+
// Assert
375+
assertThat(utbetalingstidslinjer).hasSize(2)
376+
assertThat(førsteTidslinje.tidslinje).isNotNull
377+
val perioderIFørsteTidslinje = førsteTidslinje.tidslinje.tilPerioderIkkeNull()
378+
assertThat(perioderIFørsteTidslinje).hasSize(1)
379+
assertThat(perioderIFørsteTidslinje[0].fom).isEqualTo(revurderingPeriode3Kjede1.vedtakdatoFom)
380+
assertThat(perioderIFørsteTidslinje[0].tom).isEqualTo(revurderingPeriode3Kjede1.vedtakdatoTom)
381+
assertThat(perioderIFørsteTidslinje[0].verdi.behandlingId).isEqualTo(revurderingPeriode3Kjede1.behandlingId)
382+
assertThat(perioderIFørsteTidslinje[0].verdi.periodeId).isEqualTo(revurderingPeriode3Kjede1.periodeId)
383+
assertThat(perioderIFørsteTidslinje[0].verdi.forrigePeriodeId).isEqualTo(revurderingPeriode3Kjede1.forrigePeriodeId)
384+
385+
assertThat(andreTidslinje.tidslinje).isNotNull
386+
val perioderIAndreTidslinje = andreTidslinje.tidslinje.tilPerioderIkkeNull()
387+
assertThat(perioderIAndreTidslinje).hasSize(1)
388+
assertThat(perioderIAndreTidslinje[0].fom).isEqualTo(førstegangsbehandlingPeriode1Kjede2.vedtakdatoFom)
389+
assertThat(perioderIAndreTidslinje[0].tom).isEqualTo(førstegangsbehandlingPeriode1Kjede2.vedtakdatoTom)
390+
assertThat(perioderIAndreTidslinje[0].verdi.behandlingId).isEqualTo(førstegangsbehandlingPeriode1Kjede2.behandlingId)
391+
assertThat(perioderIAndreTidslinje[0].verdi.periodeId).isEqualTo(førstegangsbehandlingPeriode1Kjede2.periodeId)
392+
assertThat(perioderIAndreTidslinje[0].verdi.forrigePeriodeId).isEqualTo(førstegangsbehandlingPeriode1Kjede2.forrigePeriodeId)
393+
}
335394
}
336395

337396
private val førstegangsBehandlingPeriode1Kjede1 =

0 commit comments

Comments
 (0)