Skip to content

Commit

Permalink
Fiks kompetanseperioder ved stans av ytelse pga endret utbetaling (#4290
Browse files Browse the repository at this point in the history
)

### 💰 Hva skal gjøres, og hvorfor?
Favro:
https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-17059
Oppfølging for: #4281

Når vi genererer kompetansene setter vi alltid siste periode til å være
uendelig fram i tid dersom til-og-med-datoen er etter dagens dato. Når
vi setter en endret utbetalingsperiode som stanser utbetalingen fjerner
vi kompetansen i den perioden.

Tidligere har vi satt kompetansene til å være uendelige før vi har
fjernet kompetansene for endrede utbetalingsperioder som stanser
utbetalingen. Da får vi problemet som er vist i bildet under, at den
uendelige kompetansene starter opp etter de endrede
utbetalingsperiodene.

![image](https://github.com/navikt/familie-ba-sak/assets/17828446/2ff9e264-7a3d-4c79-b810-38dc3cd66793)

Endrer så vi fjerner kompetansene i periodene med endret
utbetalingsperiode som stanser utbetalingen før vi gjør kompetansene
uendelige.

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [x] Jeg har testet mine endringer i henhold til akseptansekriteriene
🕵️
- [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell
deploy til miljø for å verifisere endringene.
- [x] Jeg har skrevet tester
  • Loading branch information
halvorbmundal authored Jan 9, 2024
1 parent 4e4877f commit accadbe
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 70 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package no.nav.familie.ba.sak.kjerne.eøs.endringsabonnement

import no.nav.familie.ba.sak.config.FeatureToggleConfig.Companion.ENDRET_EØS_REGELVERKFILTER_FOR_BARN
import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelseMedEndreteUtbetalinger
import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelerTilkjentYtelseOgEndreteUtbetalingerService
import no.nav.familie.ba.sak.kjerne.endretutbetaling.EndretUtbetalingAndelerOppdatertAbonnent
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.EndretUtbetalingAndel
import no.nav.familie.ba.sak.kjerne.eøs.felles.BehandlingId
Expand Down Expand Up @@ -36,7 +34,6 @@ import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.Tidspunkt
import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.somUendeligLengeTil
import no.nav.familie.ba.sak.kjerne.tidslinje.tilOgMed
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.map
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.tilTidslinje
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Regelverk
import no.nav.familie.unleash.UnleashService
import org.springframework.stereotype.Service
Expand All @@ -46,7 +43,6 @@ import org.springframework.transaction.annotation.Transactional
class TilpassKompetanserTilRegelverkService(
private val vilkårsvurderingTidslinjeService: VilkårsvurderingTidslinjeService,
private val endretUtbetalingAndelTidslinjeService: EndretUtbetalingAndelTidslinjeService,
private val andelerTilkjentYtelseOgEndreteUtbetalingerService: AndelerTilkjentYtelseOgEndreteUtbetalingerService,
private val unleashNext: UnleashService,
kompetanseRepository: PeriodeOgBarnSkjemaRepository<Kompetanse>,
endringsabonnenter: Collection<PeriodeOgBarnSkjemaEndringAbonnent<Kompetanse>>,
Expand All @@ -66,10 +62,6 @@ class TilpassKompetanserTilRegelverkService(
val barnasSkalIkkeUtbetalesTidslinjer =
endretUtbetalingAndelTidslinjeService.hentBarnasSkalIkkeUtbetalesTidslinjer(behandlingId)

val andelerTilkjentYtelse =
andelerTilkjentYtelseOgEndreteUtbetalingerService.finnAndelerTilkjentYtelseMedEndreteUtbetalinger(behandlingId.id)
val barnHarAndelTidslinjer = andelerTilkjentYtelse.tilBarnHarAndelTidslinjer()

val annenForelderOmfattetAvNorskLovgivningTidslinje =
vilkårsvurderingTidslinjeService.hentAnnenForelderOmfattetAvNorskLovgivningTidslinje(behandlingId = behandlingId)

Expand All @@ -80,7 +72,6 @@ class TilpassKompetanserTilRegelverkService(
barnasSkalIkkeUtbetalesTidslinjer,
annenForelderOmfattetAvNorskLovgivningTidslinje,
brukBarnetsRegelverkVedBlandetResultat = unleashNext.isEnabled(ENDRET_EØS_REGELVERKFILTER_FOR_BARN),
barnHarAndelTidslinjer = barnHarAndelTidslinjer,
).medBehandlingId(behandlingId)

skjemaService.lagreDifferanseOgVarsleAbonnenter(behandlingId, gjeldendeKompetanser, oppdaterteKompetanser)
Expand All @@ -90,7 +81,6 @@ class TilpassKompetanserTilRegelverkService(
@Service
class TilpassKompetanserTilEndretUtebetalingAndelerService(
private val vilkårsvurderingTidslinjeService: VilkårsvurderingTidslinjeService,
private val andelerTilkjentYtelseOgEndreteUtbetalingerService: AndelerTilkjentYtelseOgEndreteUtbetalingerService,
private val unleashNext: UnleashService,
kompetanseRepository: PeriodeOgBarnSkjemaRepository<Kompetanse>,
endringsabonnenter: Collection<PeriodeOgBarnSkjemaEndringAbonnent<Kompetanse>>,
Expand All @@ -114,10 +104,6 @@ class TilpassKompetanserTilEndretUtebetalingAndelerService(
endretUtbetalingAndeler
.tilBarnasSkalIkkeUtbetalesTidslinjer()

val andelerTilkjentYtelse =
andelerTilkjentYtelseOgEndreteUtbetalingerService.finnAndelerTilkjentYtelseMedEndreteUtbetalinger(behandlingId.id)
val barnHarAndelTidslinjer = andelerTilkjentYtelse.tilBarnHarAndelTidslinjer()

val annenForelderOmfattetAvNorskLovgivningTidslinje =
vilkårsvurderingTidslinjeService.hentAnnenForelderOmfattetAvNorskLovgivningTidslinje(behandlingId = behandlingId)

Expand All @@ -128,7 +114,6 @@ class TilpassKompetanserTilEndretUtebetalingAndelerService(
barnasSkalIkkeUtbetalesTidslinjer,
annenForelderOmfattetAvNorskLovgivningTidslinje,
brukBarnetsRegelverkVedBlandetResultat = unleashNext.isEnabled(ENDRET_EØS_REGELVERKFILTER_FOR_BARN),
barnHarAndelTidslinjer = barnHarAndelTidslinjer,
).medBehandlingId(behandlingId)

skjemaService.lagreDifferanseOgVarsleAbonnenter(behandlingId, gjeldendeKompetanser, oppdaterteKompetanser)
Expand All @@ -141,22 +126,22 @@ fun tilpassKompetanserTilRegelverk(
barnasSkalIkkeUtbetalesTidslinjer: Map<Aktør, Tidslinje<Boolean, Måned>>,
annenForelderOmfattetAvNorskLovgivningTidslinje: Tidslinje<Boolean, Måned> = TomTidslinje<Boolean, Måned>(),
brukBarnetsRegelverkVedBlandetResultat: Boolean = true,
barnHarAndelTidslinjer: Map<Aktør, Tidslinje<Boolean, Måned>>,
): Collection<Kompetanse> {
val barnasEøsRegelverkTidslinjer =
barnaRegelverkTidslinjer.tilBarnasEøsRegelverkTidslinjer(
brukBarnetsRegelverkVedBlandetResultat,
)
.leftJoin(barnasSkalIkkeUtbetalesTidslinjer) { regelverk, skalIkkeUtbetales ->
when (skalIkkeUtbetales) {
true -> null // ta bort regelverk dersom barnets utbetaling er endret til 0
else -> regelverk
}
).leftJoin(barnasSkalIkkeUtbetalesTidslinjer) { regelverk, skalIkkeUtbetales ->
when (skalIkkeUtbetales) {
true -> null // ta bort regelverk dersom barnets utbetaling er endret til 0
else -> regelverk
}
}.mapValues { (_, tidslinjer) ->
tidslinjer.forlengFremtidTilUendelig(MånedTidspunkt.nå())
}

return gjeldendeKompetanser.tilSeparateTidslinjerForBarna()
.outerJoin(barnasEøsRegelverkTidslinjer) { kompetanse, regelverk ->
regelverk?.let { kompetanse ?: Kompetanse.NULL }
.outerJoin(barnasEøsRegelverkTidslinjer) { kompetanse, eøsRegelverk ->
eøsRegelverk?.let { kompetanse ?: Kompetanse.NULL }
}
.mapValues { (_, value) ->
value.kombinerMed(annenForelderOmfattetAvNorskLovgivningTidslinje) { kompetanse, annenForelderOmfattet ->
Expand All @@ -174,12 +159,11 @@ fun VilkårsvurderingTidslinjeService.hentBarnasRegelverkResultatTidslinjer(beha

private fun Map<Aktør, Tidslinje<KombinertRegelverkResultat, Måned>>.tilBarnasEøsRegelverkTidslinjer(
brukBarnetsRegelverkVedBlandetResultat: Boolean,
) =
this.mapValues { (_, tidslinjer) ->
tidslinjer.mapTilRegelverk(brukBarnetsRegelverkVedBlandetResultat)
): Map<Aktør, Tidslinje<Regelverk, Måned>> =
this.mapValues { (_, regelverkResultatTidslinje) ->
regelverkResultatTidslinje.mapTilRegelverk(brukBarnetsRegelverkVedBlandetResultat)
.filtrer { it == Regelverk.EØS_FORORDNINGEN }
.filtrerIkkeNull()
.forlengFremtidTilUendelig(MånedTidspunkt.nå())
}

private fun Tidslinje<KombinertRegelverkResultat, Måned>.mapTilRegelverk(brukBarnetsRegelverkVedBlandetResultat: Boolean) =
Expand Down Expand Up @@ -215,12 +199,3 @@ private fun <I, T : Tidsenhet> Tidslinje<I, T>.flyttTilOgMed(tilTidspunkt: Tidsp
}
}
}

fun List<AndelTilkjentYtelseMedEndreteUtbetalinger>.tilBarnHarAndelTidslinjer(): Map<Aktør, Tidslinje<Boolean, Måned>> {
val andelerPerBarnTidslinje =
filter { !it.erSøkersAndel() }.groupBy { it.aktør }
.mapValues { (_, andelerPåBarnet) ->
andelerPåBarnet.tilTidslinje().map { andelIPeriode -> if (andelIPeriode != null) true else null }
}
return andelerPerBarnTidslinje
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkår
import no.nav.familie.unleash.UnleashService
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test

internal class KompetanseServiceTest {
Expand All @@ -55,7 +54,6 @@ internal class KompetanseServiceTest {
TilpassKompetanserTilRegelverkService(
vilkårsvurderingTidslinjeService = vilkårsvurderingTidslinjeService,
endretUtbetalingAndelTidslinjeService = endretUtbetalingAndelTidslinjeService,
andelerTilkjentYtelseOgEndreteUtbetalingerService = andelerTilkjentYtelseOgEndreteUtbetalingerService,
unleashNext = unleashService,
kompetanseRepository = mockKompetanseRepository,
endringsabonnenter = emptyList(),
Expand Down Expand Up @@ -248,7 +246,6 @@ internal class KompetanseServiceTest {
}

@Test
@Disabled
fun `kompetanse skal vare uendelig når til regelverk-tidslinjer fortsetter etter nåtidspunktet`() {
val behandlingId = BehandlingId(10L)

Expand Down Expand Up @@ -278,8 +275,7 @@ internal class KompetanseServiceTest {

val forventedeKompetanser =
KompetanseBuilder(treMånederSiden.neste(), behandlingId)
.medKompetanse("------", barn1, barn2)
.medKompetanse(" ----", barn1)
.medKompetanse("->", barn1, barn2)
.byggKompetanser()

val vilkårsvurdering = vilkårsvurderingBygger.byggVilkårsvurdering()
Expand Down Expand Up @@ -310,7 +306,6 @@ internal class KompetanseServiceTest {
}

@Test
@Disabled
fun `kompetanse skal ha sluttdato når til regelverk-tidslinjer avsluttes før nåtidspunktet`() {
val behandlingId = BehandlingId(10L)

Expand Down Expand Up @@ -341,7 +336,7 @@ internal class KompetanseServiceTest {
val forventedeKompetanser =
KompetanseBuilder(seksMånederSiden.neste(), behandlingId)
.medKompetanse("--", barn1, barn2) // Begge barna har 3 mnd EØS-regelverk før nå-tidspunktet
.medKompetanse(" --------", barn1) // Bare barn 1 har EØS-regelverk etter nå-tidspunktet
.medKompetanse(" ->", barn1) // Bare barn 1 har EØS-regelverk etter nå-tidspunktet
.byggKompetanser()

val vilkårsvurdering = vilkårsvurderingBygger.byggVilkårsvurdering()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@ import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.tidslinje.Tidslinje
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.kombinerMed
import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.Måned
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.map
import no.nav.familie.ba.sak.kjerne.tidslinje.util.KompetanseBuilder
import no.nav.familie.ba.sak.kjerne.tidslinje.util.jan
import no.nav.familie.ba.sak.kjerne.tidslinje.util.somBoolskTidslinje
import no.nav.familie.ba.sak.kjerne.tidslinje.util.tilAnnenForelderOmfattetAvNorskLovgivningTidslinje
import no.nav.familie.ba.sak.kjerne.tidslinje.util.tilRegelverkResultatTidslinje
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test

class TilpassKompetanserTilRegelverkTest {
Expand Down Expand Up @@ -59,7 +57,6 @@ class TilpassKompetanserTilRegelverkTest {
barnaRegelverkTidslinjer = eøsPerioder,
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
annenForelderOmfattetAvNorskLovgivningTidslinje = annenForelderOmfattetTidslinje,
barnHarAndelTidslinjer = eøsPerioder.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
Expand All @@ -81,7 +78,6 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = eøsPerioder,
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = eøsPerioder.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
Expand Down Expand Up @@ -109,7 +105,6 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasRegelverkResultatTidslinjer,
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
Expand Down Expand Up @@ -140,7 +135,6 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasEgneRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = barnasEgneRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
).sortedBy { it.fom }

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
Expand Down Expand Up @@ -185,7 +179,6 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasEgneRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = barnasEgneRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
).sortedBy { it.fom }

Assertions.assertEquals(forventedeKompetanser, faktiskeKompetanser)
Expand All @@ -212,7 +205,6 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
).sortedBy { it.fom }

Assertions.assertEquals(forventedeKompetanser, faktiskeKompetanser)
Expand Down Expand Up @@ -254,7 +246,6 @@ class TilpassKompetanserTilRegelverkTest {
kompetanser,
barnasRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
emptyMap(),
barnHarAndelTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
).sortedBy { it.fom }

Assertions.assertEquals(forventedeKompetanser, faktiskeKompetanser)
Expand Down Expand Up @@ -290,15 +281,13 @@ class TilpassKompetanserTilRegelverkTest {
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
barnasSkalIkkeUtbetalesTidslinjer = barnasHarEtterbetaling3År,
barnHarAndelTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
).sortedBy { it.fom }

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
}

@Test
@Disabled
fun `skal klippe kompetansen etter andelene slik at vi kun har kompetanse der vi har andeler på personen`() {
fun `skal klippe kompetansene basert på endret utbetaling som fører til stans av utbetaling`() {
val kompetanser =
KompetanseBuilder(jan2020)
.medKompetanse("->", barn1, barn2)
Expand All @@ -310,26 +299,24 @@ class TilpassKompetanserTilRegelverkTest {
barn2.aktør to "EEEEEEEEE".tilRegelverkResultatTidslinje(jan2020),
)

val forventedeKompetanser =
KompetanseBuilder(jan2020)
.medKompetanse("---", barn1, barn2)
.medKompetanse(" ---", barn1)
.byggKompetanser().sortedBy { it.fom }

val barnHarAndelTidslinjer =
val barnasSkalIkkeUtbetalesTidslinjer =
mapOf(
Pair(barn1.aktør, "tttttt".somBoolskTidslinje(jan2020)),
Pair(barn2.aktør, "ttt".somBoolskTidslinje(jan2020)),
Pair(barn1.aktør, " tttt".somBoolskTidslinje(jan2020)),
)

val faktiskeKompetanser =
tilpassKompetanserTilRegelverk(
gjeldendeKompetanser = kompetanser,
barnaRegelverkTidslinjer = barnasRegelverkResultatTidslinjer.mapValues { it.value.kombinertSøkersResultatTidslinje() },
barnasSkalIkkeUtbetalesTidslinjer = emptyMap(),
barnHarAndelTidslinjer = barnHarAndelTidslinjer,
barnasSkalIkkeUtbetalesTidslinjer = barnasSkalIkkeUtbetalesTidslinjer,
).sortedBy { it.fom }

val forventedeKompetanser =
KompetanseBuilder(jan2020)
.medKompetanse("-----", barn1, barn2)
.medKompetanse(" ----", barn2)
.byggKompetanser().sortedBy { it.fom }

assertEqualsUnordered(forventedeKompetanser, faktiskeKompetanser)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,6 @@ internal class TidslinjerTest {
emptyList(),
barnaRegelverkTidslinjer,
emptyMap(),
barnHarAndelTidslinjer = barnaRegelverkTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

assertEquals(1, kompetanser.size)
Expand Down Expand Up @@ -319,7 +318,6 @@ internal class TidslinjerTest {
emptyList(),
barnaRegelverkTidslinjer,
emptyMap(),
barnHarAndelTidslinjer = barnaRegelverkTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

val forventetRegelverkResultat =
Expand Down Expand Up @@ -375,7 +373,6 @@ internal class TidslinjerTest {
emptyList(),
barnaRegelverkTidslinjer,
emptyMap(),
barnHarAndelTidslinjer = barnaRegelverkTidslinjer.mapValues { (_, regelverkTilBarnet) -> regelverkTilBarnet.map { it != null } },
)

assertEquals(1, kompetanser.size)
Expand Down

0 comments on commit accadbe

Please sign in to comment.