diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/domene/SanityBegrunnelse.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/domene/SanityBegrunnelse.kt index bb8c1eccaab..7aceea2a904 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/domene/SanityBegrunnelse.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/domene/SanityBegrunnelse.kt @@ -29,6 +29,7 @@ interface ISanityBegrunnelse { val utvidetBarnetrygdTriggere: List val fagsakType: FagsakType? val tema: Tema? + val valgbarhet: Valgbarhet? val gjelderEtterEndretUtbetaling get() = this is SanityBegrunnelse && @@ -55,6 +56,7 @@ data class SanityBegrunnelse( override val utvidetBarnetrygdTriggere: List = emptyList(), override val fagsakType: FagsakType? = null, override val tema: Tema? = null, + override val valgbarhet: Valgbarhet? = null, @Deprecated("Bruk vilkår") val vilkaar: List = emptyList(), val rolle: List = emptyList(), @@ -64,7 +66,6 @@ data class SanityBegrunnelse( val endringsaarsaker: List<Årsak> = emptyList(), val endretUtbetalingsperiodeDeltBostedUtbetalingTrigger: EndretUtbetalingsperiodeDeltBostedTriggere? = null, val endretUtbetalingsperiodeTriggere: List = emptyList(), - val valgbarhet: Valgbarhet? = null, ) : ISanityBegrunnelse { val triggesAv: TriggesAv by lazy { this.tilTriggesAv() } diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/begrunnelser/SanityE\303\230SBegrunnelse.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/begrunnelser/SanityE\303\230SBegrunnelse.kt" index de8878d10fd..768b372c572 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/begrunnelser/SanityE\303\230SBegrunnelse.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/begrunnelser/SanityE\303\230SBegrunnelse.kt" @@ -91,6 +91,7 @@ data class SanityEØSBegrunnelse( ) : ISanityBegrunnelse { override val lovligOppholdTriggere: List = emptyList() override val utvidetBarnetrygdTriggere: List = emptyList() + override val valgbarhet = null override val bosattIRiketTriggere: List = emptyList() override val giftPartnerskapTriggere: List = emptyList() override val borMedSokerTriggere: List = emptyList() diff --git a/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/FortsattInnvilgetFilter.kt b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/FortsattInnvilgetFilter.kt new file mode 100644 index 00000000000..fe0120a3171 --- /dev/null +++ b/src/main/kotlin/no/nav/familie/ba/sak/kjerne/vedtak/vedtaksperiode/vedtakBegrunnelseProdusent/FortsattInnvilgetFilter.kt @@ -0,0 +1,40 @@ +package no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.vedtakBegrunnelseProdusent + +import erLikVilkårOgUtdypendeVilkårIPeriode +import no.nav.familie.ba.sak.kjerne.autovedtak.fødselshendelse.Resultat +import no.nav.familie.ba.sak.kjerne.brev.brevBegrunnelseProdusent.GrunnlagForBegrunnelse +import no.nav.familie.ba.sak.kjerne.brev.domene.SanityPeriodeResultat +import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person +import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.IVedtakBegrunnelse + +fun hentFortsattInnvilgetBegrunnelserPerPerson( + begrunnelseGrunnlagPerPerson: Map, + grunnlag: GrunnlagForBegrunnelse, +): Map> { + val fagsakType = grunnlag.behandlingsGrunnlagForVedtaksperioder.fagsakType + + val standardbegrunnelserIngenEndring = grunnlag.sanityBegrunnelser + .filterValues { it.erGjeldendeForFagsakType(fagsakType) } + .filterValues { it.periodeResultat == SanityPeriodeResultat.INGEN_ENDRING } + + val eøsBegrunnelserIngenEndring = grunnlag.sanityEØSBegrunnelser + .filterValues { it.erGjeldendeForFagsakType(fagsakType) } + .filterValues { it.periodeResultat == SanityPeriodeResultat.INGEN_ENDRING } + + return begrunnelseGrunnlagPerPerson.mapValues { (person, begrunnelseGrunnlag) -> + val begrunnelseGrunnlagForPerson = begrunnelseGrunnlag.dennePerioden + + val oppfylteVilkårresultater = + begrunnelseGrunnlagForPerson.vilkårResultater.filter { it.resultat == Resultat.OPPFYLT }.toList() + + val standardbegrunnelseSomMatcherVilkår = standardbegrunnelserIngenEndring + .filterValues { it.erGjeldendeForRolle(person, fagsakType) } + .filterValues { it.erLikVilkårOgUtdypendeVilkårIPeriode(oppfylteVilkårresultater) } + + val eøsBegrunnelserSomMatcherKompetanse = eøsBegrunnelserIngenEndring + .filterValues { it.erLikKompetanseIPeriode(begrunnelseGrunnlag) } + + standardbegrunnelseSomMatcherVilkår.keys.toSet() + + eøsBegrunnelserSomMatcherKompetanse.keys.toSet() + } +} 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 83d8ca8a367..9a6486f528c 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 @@ -70,6 +70,13 @@ fun VedtaksperiodeMedBegrunnelser.hentGyldigeBegrunnelserPerPerson( grunnlag, ) + if (this.type == Vedtaksperiodetype.FORTSATT_INNVILGET) { + return hentFortsattInnvilgetBegrunnelserPerPerson( + begrunnelseGrunnlagPerPerson = begrunnelseGrunnlagPerPerson, + grunnlag = grunnlag, + ) + } + return begrunnelseGrunnlagPerPerson.mapValues { (person, begrunnelseGrunnlag) -> val relevantePeriodeResultater = hentResultaterForPeriode(begrunnelseGrunnlag.dennePerioden, begrunnelseGrunnlag.forrigePeriode) @@ -166,9 +173,10 @@ private fun hentStandardBegrunnelser( it.periodeResultat in relevantePeriodeResultater } - val filtrertPåRolleFagsaktypePeriodeTypeOgManuelleBegrunnelser = filtrertPåRolleFagsaktypeOgPeriodetype.filterValues { - it.erManuellBegrunnelse() - } + val filtrertPåRolleFagsaktypePeriodeTypeOgManuelleBegrunnelser = + filtrertPåRolleFagsaktypeOgPeriodetype.filterValues { + it.erManuellBegrunnelse() + } val filtrertPåVilkårOgEndretUtbetaling = filtrertPåRolleFagsaktypePeriodeTypeOgManuelleBegrunnelser.filterValues { val begrunnelseErGjeldendeForUtgjørendeVilkår = it.vilkår.isNotEmpty() @@ -193,9 +201,10 @@ private fun hentStandardBegrunnelser( it.erGjeldendeForOpphørFraForrigeBehandling(begrunnelseGrunnlag) } - val filtrertPåSmåbarnstillegg = filtrertPåRolleFagsaktypePeriodeTypeOgManuelleBegrunnelser.filterValues { begrunnelse -> - begrunnelse.erGjeldendeForSmåbarnstillegg(begrunnelseGrunnlag) - } + val filtrertPåSmåbarnstillegg = + filtrertPåRolleFagsaktypePeriodeTypeOgManuelleBegrunnelser.filterValues { begrunnelse -> + begrunnelse.erGjeldendeForSmåbarnstillegg(begrunnelseGrunnlag) + } val begrunnelserFiltrertPåPeriodetypeForrigePeriode = sanityBegrunnelser.filterValues { it.periodeResultat in relevantePeriodeResultaterForrigePeriode @@ -223,7 +232,7 @@ private fun hentStandardBegrunnelser( private fun SanityBegrunnelse.erManuellBegrunnelse() = ØvrigTrigger.ALLTID_AUTOMATISK !in ovrigeTriggere -private fun SanityBegrunnelse.erGjeldendeForFagsakType( +fun ISanityBegrunnelse.erGjeldendeForFagsakType( fagsakType: FagsakType, ) = if (valgbarhet == Valgbarhet.SAKSPESIFIKK) { fagsakType == this.fagsakType @@ -313,7 +322,7 @@ private fun hentEØSStandardBegrunnelser( return filtrertPåVilkår + filtrertPåKompetanse } -private fun SanityBegrunnelse.erGjeldendeForRolle( +fun SanityBegrunnelse.erGjeldendeForRolle( person: Person, fagsakType: FagsakType, ): Boolean { diff --git a/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/forstatt_innvilget.feature b/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/forstatt_innvilget.feature new file mode 100644 index 00000000000..9c3ef05cf5b --- /dev/null +++ b/src/test/resources/no/nav/familie/ba/sak/cucumber/begrunnelsetekster/forstatt_innvilget.feature @@ -0,0 +1,66 @@ +# language: no +# encoding: UTF-8 + +Egenskap: Gyldige begrunnelser for fortsatt innvilget + + Bakgrunn: + Gitt følgende fagsaker for begrunnelse + | FagsakId | Fagsaktype | + | 1 | NORMAL | + + Gitt følgende behandling + | BehandlingId | FagsakId | ForrigeBehandlingId | Behandlingsresultat | Behandlingsårsak | + | 1 | 1 | | ENDRET_UTBETALING | NYE_OPPLYSNINGER | + | 2 | 1 | 1 | FORTSATT_INNVILGET | NYE_OPPLYSNINGER | + + Og følgende persongrunnlag for begrunnelse + | BehandlingId | AktørId | Persontype | Fødselsdato | + | 1 | 1 | SØKER | 31.10.1987 | + | 1 | 2 | BARN | 19.02.2011 | + | 2 | 1 | SØKER | 31.10.1987 | + | 2 | 2 | BARN | 19.02.2011 | + + Scenario: Skal gi begrunnelser som passer med + Og følgende dagens dato 20.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 | + | 1 | LOVLIG_OPPHOLD | | 31.10.1987 | | OPPFYLT | Nei | + | 1 | BOSATT_I_RIKET | | 31.10.1987 | 14.06.2023 | OPPFYLT | Nei | + | 1 | BOSATT_I_RIKET | VURDERT_MEDLEMSKAP | 15.06.2023 | | OPPFYLT | Nei | + + | 2 | GIFT_PARTNERSKAP,LOVLIG_OPPHOLD,BOR_MED_SØKER | | 19.02.2011 | | OPPFYLT | Nei | + | 2 | BOSATT_I_RIKET | | 19.02.2011 | 14.06.2023 | OPPFYLT | Nei | + | 2 | UNDER_18_ÅR | | 19.02.2011 | 18.02.2029 | OPPFYLT | Nei | + | 2 | BOSATT_I_RIKET | VURDERT_MEDLEMSKAP | 15.06.2023 | | 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 | + | 1 | LOVLIG_OPPHOLD | | 31.10.1987 | | OPPFYLT | Nei | + | 1 | BOSATT_I_RIKET | | 31.10.1987 | 14.06.2023 | OPPFYLT | Nei | + | 1 | BOSATT_I_RIKET | VURDERT_MEDLEMSKAP | 15.06.2023 | | OPPFYLT | Nei | + + | 2 | GIFT_PARTNERSKAP,LOVLIG_OPPHOLD,BOR_MED_SØKER | | 19.02.2011 | | OPPFYLT | Nei | + | 2 | BOSATT_I_RIKET | | 19.02.2011 | 14.06.2023 | OPPFYLT | Nei | + | 2 | UNDER_18_ÅR | | 19.02.2011 | 18.02.2029 | OPPFYLT | Nei | + | 2 | BOSATT_I_RIKET | VURDERT_MEDLEMSKAP | 15.06.2023 | | OPPFYLT | Nei | + + Og med andeler tilkjent ytelse for begrunnelse + | AktørId | BehandlingId | Fra dato | Til dato | Beløp | Ytelse type | Prosent | Sats | + | 2 | 1 | 01.03.2011 | 28.02.2019 | 970 | ORDINÆR_BARNETRYGD | 100 | 970 | + | 2 | 1 | 01.03.2019 | 28.02.2023 | 1054 | ORDINÆR_BARNETRYGD | 100 | 1054 | + | 2 | 1 | 01.03.2023 | 30.06.2023 | 1083 | ORDINÆR_BARNETRYGD | 100 | 1083 | + | 2 | 1 | 01.07.2023 | 31.01.2029 | 1310 | ORDINÆR_BARNETRYGD | 100 | 1310 | + | 2 | 2 | 01.03.2011 | 28.02.2019 | 970 | ORDINÆR_BARNETRYGD | 100 | 970 | + | 2 | 2 | 01.03.2019 | 28.02.2023 | 1054 | ORDINÆR_BARNETRYGD | 100 | 1054 | + | 2 | 2 | 01.03.2023 | 30.06.2023 | 1083 | ORDINÆR_BARNETRYGD | 100 | 1083 | + | 2 | 2 | 01.07.2023 | 31.01.2029 | 1310 | ORDINÆR_BARNETRYGD | 100 | 1310 | + + Når begrunnelsetekster genereres for behandling 2 + + Så forvent følgende standardBegrunnelser + | Fra dato | Til dato | VedtaksperiodeType | Regelverk Inkluderte Begrunnelser | Inkluderte Begrunnelser | Ekskluderte Begrunnelser | + | | | FORTSATT_INNVILGET | | FORTSATT_INNVILGET_MEDLEM_I_FOLKETRYGDEN | FORTSATT_INNVILGET_SØKER_BOSATT_I_RIKET, FORTSATT_INNVILGET_FORVARING_GIFT, FORTSATT_INNVILGET_FORTSATT_AVTALE_OM_DELT_BOSTED | + | | | FORTSATT_INNVILGET | EØS_FORORDNINGEN | | FORTSATT_INNVILGET_PRIMÆRLAND_STANDARD | \ No newline at end of file