Skip to content

Commit

Permalink
Lag egen løype for gyldige begrunnelser fortsatt innvilget (#3984)
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-15590)

Lager egen løype når vi finner gyldige begrunnelser når
vedtaksperiodetypen er fortsatt innvilget. I denne løypa bryr vi oss kun
hva vi har i denne perioden, og ikke hva vi hadde i forrige periode
eller behandling.

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [ ] 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

---------

Co-authored-by: Kristine Steine <[email protected]>
  • Loading branch information
halvorbmundal and kristeine authored Sep 21, 2023
1 parent 165323b commit ea9cdcc
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ interface ISanityBegrunnelse {
val utvidetBarnetrygdTriggere: List<UtvidetBarnetrygdTrigger>
val fagsakType: FagsakType?
val tema: Tema?
val valgbarhet: Valgbarhet?

val gjelderEtterEndretUtbetaling
get() = this is SanityBegrunnelse &&
Expand All @@ -55,6 +56,7 @@ data class SanityBegrunnelse(
override val utvidetBarnetrygdTriggere: List<UtvidetBarnetrygdTrigger> = emptyList(),
override val fagsakType: FagsakType? = null,
override val tema: Tema? = null,
override val valgbarhet: Valgbarhet? = null,
@Deprecated("Bruk vilkår")
val vilkaar: List<SanityVilkår> = emptyList(),
val rolle: List<VilkårRolle> = emptyList(),
Expand All @@ -64,7 +66,6 @@ data class SanityBegrunnelse(
val endringsaarsaker: List<Årsak> = emptyList(),
val endretUtbetalingsperiodeDeltBostedUtbetalingTrigger: EndretUtbetalingsperiodeDeltBostedTriggere? = null,
val endretUtbetalingsperiodeTriggere: List<EndretUtbetalingsperiodeTrigger> = emptyList(),
val valgbarhet: Valgbarhet? = null,
) : ISanityBegrunnelse {

val triggesAv: TriggesAv by lazy { this.tilTriggesAv() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ data class SanityEØSBegrunnelse(
) : ISanityBegrunnelse {
override val lovligOppholdTriggere: List<VilkårTrigger> = emptyList()
override val utvidetBarnetrygdTriggere: List<UtvidetBarnetrygdTrigger> = emptyList()
override val valgbarhet = null
override val bosattIRiketTriggere: List<VilkårTrigger> = emptyList()
override val giftPartnerskapTriggere: List<VilkårTrigger> = emptyList()
override val borMedSokerTriggere: List<VilkårTrigger> = emptyList()
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Person, IBegrunnelseGrunnlagForPeriode>,
grunnlag: GrunnlagForBegrunnelse,
): Map<Person, Set<IVedtakBegrunnelse>> {
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()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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()
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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

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 |

0 comments on commit ea9cdcc

Please sign in to comment.