diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/VedtakBegrunnelseProdusent.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/VedtakBegrunnelseProdusent.kt index 1fde2ee6db1..b0ba9ad6ba6 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/VedtakBegrunnelseProdusent.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/VedtakBegrunnelseProdusent.kt @@ -286,7 +286,14 @@ private fun SanityBegrunnelse.erGjeldendeForReduksjonFraForrigeBehandling(begrun val begrunnelseGjelderMistedeVilkår = this.vilkår.all { it in vilkårMistetSidenForrigeBehandling } - return begrunnelseGjelderReduksjonFraForrigeBehandling() && begrunnelseGjelderMistedeVilkår + val haddeSmåbarnstilleggForrigeBehandling = begrunnelseGrunnlag.erSmåbarnstilleggIForrigeBehandlingPeriode + val harSmåbarnstilleggDennePerioden = + begrunnelseGrunnlag.dennePerioden.andeler.any { it.type == YtelseType.SMÅBARNSTILLEGG } + + val begrunnelseGjelderTaptSmåbarnstillegg = + UtvidetBarnetrygdTrigger.SMÅBARNSTILLEGG in utvidetBarnetrygdTriggere && haddeSmåbarnstilleggForrigeBehandling && !harSmåbarnstilleggDennePerioden + + return begrunnelseGjelderReduksjonFraForrigeBehandling() && (begrunnelseGjelderMistedeVilkår || begrunnelseGjelderTaptSmåbarnstillegg) } private fun SanityBegrunnelse.begrunnelseGjelderReduksjonFraForrigeBehandling() = diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/GrunnlagForGjeldendeOgForrigeBehandling.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/GrunnlagForGjeldendeOgForrigeBehandling.kt index 9ce5e76b40f..7989f15b5e0 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/GrunnlagForGjeldendeOgForrigeBehandling.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/GrunnlagForGjeldendeOgForrigeBehandling.kt @@ -4,15 +4,3 @@ data class GrunnlagForGjeldendeOgForrigeBehandling( val gjeldende: VedtaksperiodeGrunnlagForPerson?, val erReduksjonSidenForrigeBehandling: Boolean = false, ) - -fun erReduksjonSidenForrigeBehandling( - erInnvilget: Boolean, - erInnvilgetForrigePeriode: Boolean, - erInnvilgetIForrigeBehandling: Boolean, - erInnvilgetIForrigePeriodeIForrigeBehandling: Boolean, -): Boolean { - return !erInnvilget && - !erInnvilgetForrigePeriode && - erInnvilgetIForrigeBehandling && - !erInnvilgetIForrigePeriodeIForrigeBehandling -} diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeGrunnlagForPerson.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeGrunnlagForPerson.kt index df8e261f176..6d4d6015379 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeGrunnlagForPerson.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeGrunnlagForPerson.kt @@ -30,6 +30,14 @@ sealed interface VedtaksperiodeGrunnlagForPerson { fun erInnvilget() = this is VedtaksperiodeGrunnlagForPersonVilkårInnvilget && this.erInnvilgetEndretUtbetaling() + fun hentInnvilgedeYtelsestyper() = + if (this is VedtaksperiodeGrunnlagForPersonVilkårInnvilget) { + this.andeler.filter { it.prosent > BigDecimal.ZERO } + .map { it.type }.toSet() + } else { + emptySet() + } + fun kopier( person: Person = this.person, vilkårResultaterForVedtaksperiode: List = this.vilkårResultaterForVedtaksperiode, diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeProdusent.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeProdusent.kt index b1528420c80..dd96836a5d4 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeProdusent.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtaksperiodeProdusent/VedtaksperiodeProdusent.kt @@ -12,6 +12,7 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak.OMREGNING import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak.OMREGNING_SMÅBARNSTILLEGG import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak.SMÅBARNSTILLEGG import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelse +import no.nav.familie.ba.sak.kjerne.beregning.domene.YtelseType import no.nav.familie.ba.sak.kjerne.tidslinje.Periode import no.nav.familie.ba.sak.kjerne.tidslinje.Tidslinje import no.nav.familie.ba.sak.kjerne.tidslinje.eksperimentelt.filtrer @@ -279,34 +280,66 @@ private fun kombinerGjeldendeOgForrigeGrunnlag( grunnlagTidslinjePerPerson.map { (aktørId, grunnlagstidslinje) -> val grunnlagForrigeBehandling = grunnlagTidslinjePerPersonForrigeBehandling[aktørId] - val innvilgetForrigeBehandlingTidslinje = - grunnlagForrigeBehandling?.map { it?.erInnvilget() ?: false } ?: TomTidslinje() + val ytelsestyperInnvilgetForrigeBehandlingTidslinje = + grunnlagForrigeBehandling?.map { it?.hentInnvilgedeYtelsestyper() } ?: TomTidslinje() - val grunnlagTidslinjeMedErForrigeBehandlingInnvilget = - grunnlagstidslinje.kombinerMed(innvilgetForrigeBehandlingTidslinje) { gjeldende, erForrigeInnvilget -> - Pair(gjeldende, erForrigeInnvilget) + val grunnlagTidslinjeMedInnvilgedeYtelsestyperForrigeBehandling = + grunnlagstidslinje.kombinerMed(ytelsestyperInnvilgetForrigeBehandlingTidslinje) { gjeldendePeriode, innvilgedeYtelsestyperForrigeBehandling -> + GjeldendeMedInnvilgedeYtelsestyperForrigeBehandling( + gjeldendePeriode, + innvilgedeYtelsestyperForrigeBehandling, + ) } - grunnlagTidslinjeMedErForrigeBehandlingInnvilget.zipMedNeste(ZipPadding.FØR) + grunnlagTidslinjeMedInnvilgedeYtelsestyperForrigeBehandling.zipMedNeste(ZipPadding.FØR) .map { - val forrigePeriode = it?.first?.first - val erForrigePeriodeInnvilgetIForrigeBehandling = it?.first?.second ?: false - val gjeldende = it?.second?.first - val erGjeldendePeriodeInnvilgetIForrigeBehandling = it?.second?.second ?: false + val forrigePeriode = it?.first + val gjeldende = it?.second + + val erReduksjonFraForrigeBehandlingPåMinstEnYtelsestype = + erReduksjonFraForrigeBehandlingPåMinstEnYtelsestype( + innvilgedeYtelsestyperForrigePeriode = forrigePeriode?.grunnlagForPerson?.hentInnvilgedeYtelsestyper(), + innvilgedeYtelsestyperForrigePeriodeForrigeBehandling = forrigePeriode?.innvilgedeYtelsestyperForrigeBehandling, + innvilgedeYtelsestyperDennePerioden = gjeldende?.grunnlagForPerson?.hentInnvilgedeYtelsestyper(), + innvilgedeYtelsestyperDennePeriodenForrigeBehandling = gjeldende?.innvilgedeYtelsestyperForrigeBehandling, + ) GrunnlagForGjeldendeOgForrigeBehandling( - gjeldende = gjeldende, - erReduksjonSidenForrigeBehandling = - erReduksjonSidenForrigeBehandling( - gjeldende?.erInnvilget() ?: false, - forrigePeriode?.erInnvilget() ?: false, - erGjeldendePeriodeInnvilgetIForrigeBehandling, - erForrigePeriodeInnvilgetIForrigeBehandling, - ), + gjeldende = gjeldende?.grunnlagForPerson, + erReduksjonSidenForrigeBehandling = erReduksjonFraForrigeBehandlingPåMinstEnYtelsestype, + ) - }.slåSammenLike().slåSammenSammenhengendeOpphørsPerioder() + }.slåSammenSammenhengendeOpphørsPerioder() } +data class GjeldendeMedInnvilgedeYtelsestyperForrigeBehandling( + val grunnlagForPerson: VedtaksperiodeGrunnlagForPerson?, + val innvilgedeYtelsestyperForrigeBehandling: Set?, +) + +private fun erReduksjonFraForrigeBehandlingPåMinstEnYtelsestype( + innvilgedeYtelsestyperForrigePeriode: Set?, + innvilgedeYtelsestyperForrigePeriodeForrigeBehandling: Set?, + innvilgedeYtelsestyperDennePerioden: Set?, + innvilgedeYtelsestyperDennePeriodenForrigeBehandling: Set?, +): Boolean { + return YtelseType.values().any { ytelseType -> + val ytelseInnvilgetDennePerioden = + innvilgedeYtelsestyperDennePerioden?.contains(ytelseType) ?: false + val ytelseInnvilgetForrigePeriode = + innvilgedeYtelsestyperForrigePeriode?.contains(ytelseType) ?: false + val ytelseInnvilgetDennePeriodenForrigeBehandling = + innvilgedeYtelsestyperDennePeriodenForrigeBehandling?.contains(ytelseType) ?: false + val ytelseInnvilgetForrigePeriodeForrigeBehandling = + innvilgedeYtelsestyperForrigePeriodeForrigeBehandling?.contains(ytelseType) ?: false + + !ytelseInnvilgetForrigePeriode && + !ytelseInnvilgetDennePerioden && + !ytelseInnvilgetForrigePeriodeForrigeBehandling && + ytelseInnvilgetDennePeriodenForrigeBehandling + } +} + private fun Tidslinje.slåSammenSammenhengendeOpphørsPerioder(): Tidslinje { val perioder = this.perioder().sortedBy { it.fraOgMed }.toList() diff --git a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/BegrunnelseTeksterStepDefinition.kt b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/BegrunnelseTeksterStepDefinition.kt index a5c8fa0932d..0107560d267 100644 --- a/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/BegrunnelseTeksterStepDefinition.kt +++ b/src/test/integrasjonstester/kotlin/no/nav/familie/ba/sak/cucumber/BegrunnelseTeksterStepDefinition.kt @@ -247,7 +247,7 @@ class BegrunnelseTeksterStepDefinition { kompetanser = kompetanser[forrigeBehandlingId] ?: emptyList(), endredeUtbetalinger = endredeUtbetalinger[forrigeBehandlingId] ?: emptyList(), andelerTilkjentYtelse = andelerTilkjentYtelse[forrigeBehandlingId] ?: emptyList(), - perioderOvergangsstønad = emptyList(), + perioderOvergangsstønad = overgangsstønadForVedtaksperiode[forrigeBehandlingId] ?: emptyList(), uregistrerteBarn = emptyList(), ) } diff --git a/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/reduksjon_fra_forrige_behandling.feature b/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/reduksjon_fra_forrige_behandling.feature index 50742001186..876998b73c4 100644 --- a/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/reduksjon_fra_forrige_behandling.feature +++ b/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/reduksjon_fra_forrige_behandling.feature @@ -115,11 +115,79 @@ Egenskap: Reduksjon fra forrige behandling | 01.08.2028 | 31.07.2040 | UTBETALING_MED_REDUKSJON_FRA_SIST_IVERKSATTE_BEHANDLING | | REDUKSJON_SØKER_ER_GIFT | | | 01.08.2040 | | OPPHØR | | | | - Scenario: Skal få reduksjon fra forrige behandling-begrunnelser knyttet til bor fast hos søker for det ene barnet + Scenario: Skal få reduksjon fra forrige behandling-begrunnelse knyttet til småbarnstillegg når overgangsstønad forsvinner Gitt følgende fagsaker for begrunnelse | FagsakId | Fagsaktype | | 1 | NORMAL | + Gitt følgende behandling + | BehandlingId | FagsakId | ForrigeBehandlingId | Behandlingsresultat | Behandlingsårsak | + | 1 | 1 | | INNVILGET | SØKNAD | + | 2 | 1 | 1 | ENDRET_UTBETALING | SMÅBARNSTILLEGG | + + Og følgende persongrunnlag for begrunnelse + | BehandlingId | AktørId | Persontype | Fødselsdato | + | 1 | 1234 | SØKER | 19.11.1984 | + | 1 | 3456 | BARN | 26.08.2016 | + | 2 | 1234 | SØKER | 19.11.1984 | + | 2 | 3456 | BARN | 26.08.2016 | + + + Og følgende dagens dato 17.09.2023 + Og lag personresultater for begrunnelse for behandling 1 + Og lag personresultater for begrunnelse for behandling 2 + + Og legg til nye vilkårresultater for begrunnelse for behandling 1 + | AktørId | Vilkår | Utdypende vilkår | Fra dato | Til dato | Resultat | Er eksplisitt avslag | + | 1234 | LOVLIG_OPPHOLD,BOSATT_I_RIKET | | 19.11.1984 | | OPPFYLT | Nei | + | 1234 | UTVIDET_BARNETRYGD | | 26.08.2016 | | OPPFYLT | Nei | + + | 3456 | LOVLIG_OPPHOLD,BOR_MED_SØKER,GIFT_PARTNERSKAP | | 26.08.2016 | | OPPFYLT | Nei | + | 3456 | BOSATT_I_RIKET | | 26.08.2016 | 31.12.2018 | OPPFYLT | Nei | + | 3456 | UNDER_18_ÅR | | 26.08.2016 | 25.08.2034 | OPPFYLT | Nei | + + Og legg til nye vilkårresultater for begrunnelse for behandling 2 + | AktørId | Vilkår | Utdypende vilkår | Fra dato | Til dato | Resultat | Er eksplisitt avslag | + | 1234 | LOVLIG_OPPHOLD,BOSATT_I_RIKET | | 19.11.1984 | | OPPFYLT | Nei | + | 1234 | UTVIDET_BARNETRYGD | | 26.08.2016 | | OPPFYLT | Nei | + + | 3456 | LOVLIG_OPPHOLD,BOR_MED_SØKER,GIFT_PARTNERSKAP | | 26.08.2016 | | OPPFYLT | Nei | + | 3456 | BOSATT_I_RIKET | | 26.08.2016 | 31.12.2018 | OPPFYLT | Nei | + | 3456 | UNDER_18_ÅR | | 26.08.2016 | 25.08.2034 | OPPFYLT | Nei | + + Og med andeler tilkjent ytelse for begrunnelse + | AktørId | BehandlingId | Fra dato | Til dato | Beløp | Ytelse type | Prosent | Sats | + | 1234 | 1 | 01.09.2016 | 31.12.2018 | 1054 | UTVIDET_BARNETRYGD | 100 | 1054 | + | 1234 | 1 | 01.04.2017 | 31.12.2018 | 660 | SMÅBARNSTILLEGG | 100 | 660 | + + | 3456 | 1 | 01.09.2016 | 31.12.2018 | 1054 | ORDINÆR_BARNETRYGD | 100 | 1054 | + + | 1234 | 2 | 01.09.2016 | 31.12.2018 | 1054 | UTVIDET_BARNETRYGD | 100 | 1054 | + + | 3456 | 2 | 01.09.2016 | 31.12.2018 | 1054 | ORDINÆR_BARNETRYGD | 100 | 1054 | + + Og med overgangsstønad for begrunnelse + | AktørId | BehandlingId | Fra dato | Til dato | + | 3456 | 1 | 01.04.2017 | 30.06.2017 | + | 3456 | 1 | 01.07.2017 | 30.09.2017 | + | 3456 | 1 | 01.10.2017 | 31.12.2017 | + | 3456 | 1 | 01.01.2018 | 31.03.2018 | + | 3456 | 1 | 01.04.2018 | 30.06.2018 | + | 3456 | 1 | 01.07.2018 | 30.09.2018 | + | 3456 | 1 | 01.10.2018 | 31.12.2018 | + + Når begrunnelsetekster genereres for behandling 2 + + Så forvent følgende standardBegrunnelser + | Fra dato | Til dato | VedtaksperiodeType | Regelverk | Inkluderte Begrunnelser | Ekskluderte Begrunnelser | + | 01.04.2017 | 31.12.2018 | UTBETALING_MED_REDUKSJON_FRA_SIST_IVERKSATTE_BEHANDLING | | SMÅBARNSTILLEGG_HADDE_IKKE_FULL_OVERGANGSSTØNAD | | + | 01.01.2019 | | OPPHØR | | | | + + Scenario: Skal få reduksjon fra forrige behandling-begrunnelser knyttet til bor fast hos søker for det ene barnet + Gitt følgende fagsaker for begrunnelse + | FagsakId | Fagsaktype | + | 1 | NORMAL | + Gitt følgende behandling | BehandlingId | FagsakId | ForrigeBehandlingId | Behandlingsresultat | Behandlingsårsak | | 1 | 1 | | INNVILGET | SØKNAD |