Skip to content

Commit

Permalink
Ignorer økt sats når vi ser etter perioder med ingen endring (#4107)
Browse files Browse the repository at this point in the history
### 💰 Hva skal gjøres, og hvorfor?
Favro: NAV-16265

Mor og far går fra hverandre og vi skal dele barnetrygden, men den
første måneden er allerede utbetalt fullt til mor og vi vil gi
begrunnelse om at foreldrene selv må gjøre opp mellom hverandre. Denne
begrunnelsen er begrenset til perioder med perioderesultat
`INGEN_ENDRING`. Komplikasjonen i denne saken er at måneden vi ser på
har en satsøkning i seg, og dermed ikke får `INGEN_ENDRING`.

Endrer slik at vi ignorerer sats**økninger** når vi vurderer om en
periode kvalifiserer som `INGEN_ENDRING`

### 🔎️ Er det noe spesielt du ønsker tilbakemelding om?
Denne endringen førte til feil i et par urelaterte tester, så vi har
brukt tid på å spisse logikk og tester slik at de ikke skal treffe
urelaterte endringer.

Begrenser f.eks. logikken fra #3999 som sier at alle innvilget-tekster
skal bli med i EØS-perioder med `INGEN_ENDRING` - slik at vi kun tar med
tekster som matcher med kompetansen i perioden. Har avsjekket dette med
Linda.

### ✅ 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. 

### 💬 Ønsker du en muntlig gjennomgang?
- [ ] Ja
- [ ] Nei

---------

Co-authored-by: Daphne Leebeek <[email protected]>
Co-authored-by: halvorbmundal <[email protected]>
  • Loading branch information
3 people authored Oct 30, 2023
1 parent 119cb54 commit 2373d50
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -419,15 +419,15 @@ private fun hentEØSStandardBegrunnelser(
val begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType = begrunnelserFiltrertPåPeriodetype
.filterValues { it.erGjeldendeForBrevPeriodeType(vedtaksperiode, erUtbetalingEllerDeltBostedIPeriode) }

val filtrertPåVilkår = begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType.filterValues {
val filtrertPåEndretVilkår = begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType.filterValues {
it.erGjeldendeForUtgjørendeVilkår(
begrunnelseGrunnlag,
utvidetVilkårPåSøkerIPeriode,
utvidetVilkårPåSøkerIForrigePeriode,
)
}

val filtrertPåKompetanseValutakursOgUtenlandskperiodeBeløp = begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType.filterValues { begrunnelse ->
val filtrertPåEndretKompetanseValutakursOgUtenlandskperiodeBeløp = begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType.filterValues { begrunnelse ->
val endringIKompetanseValutakursEllerUtenlandskPeriodebeløp =
erEndringIKompetanse(begrunnelseGrunnlag) || erEndringIValutakurs(begrunnelseGrunnlag) || erEndringIUtenlandskPeriodebeløp(
begrunnelseGrunnlag,
Expand All @@ -436,22 +436,14 @@ private fun hentEØSStandardBegrunnelser(
endringIKompetanseValutakursEllerUtenlandskPeriodebeløp && begrunnelse.erLikKompetanseIPeriode(begrunnelseGrunnlag)
}

val filtrertPåPeriodeResultat = begrunnelserFiltrertPåPeriodetype.filterValues {
filtrerPåPeriodeResultat(relevantePeriodeResultater, it)
}

return filtrertPåVilkår + filtrertPåKompetanseValutakursOgUtenlandskperiodeBeløp + filtrertPåPeriodeResultat
}

private fun filtrerPåPeriodeResultat(
relevantePeriodeResultater: List<SanityPeriodeResultat>,
sanityEøsBegrunnelse: SanityEØSBegrunnelse,
): Boolean {
val periodeResultatErIngenEndring = SanityPeriodeResultat.INGEN_ENDRING in relevantePeriodeResultater
val periodeResultatPåBegrunnelseErInnvilgetEllerØkning =
sanityEøsBegrunnelse.periodeResultat == SanityPeriodeResultat.INNVILGET_ELLER_ØKNING
val filtrertPåIngenEndringMedLikKompetanse =
begrunnelserFiltrertPåPerioderesultatOgBrevPeriodeType.filterValues {
SanityPeriodeResultat.INGEN_ENDRING in relevantePeriodeResultater && it.erLikKompetanseIPeriode(
begrunnelseGrunnlag,
)
}

return periodeResultatErIngenEndring && periodeResultatPåBegrunnelseErInnvilgetEllerØkning
return filtrertPåEndretVilkår + filtrertPåEndretKompetanseValutakursOgUtenlandskperiodeBeløp + filtrertPåIngenEndringMedLikKompetanse
}

fun SanityBegrunnelse.erGjeldendeForRolle(
Expand Down Expand Up @@ -586,14 +578,18 @@ private fun hentResultaterForPeriode(
begrunnelseGrunnlagForPeriode,
begrunnelseGrunnlagForrigePeriode,
)
val erSatsøkning = erSatsøkningMellomPerioder(
begrunnelseGrunnlagForPeriode,
begrunnelseGrunnlagForrigePeriode,
)

val erSøker = begrunnelseGrunnlagForPeriode.person.type == PersonType.SØKER
val erOrdinæreVilkårOppfyltIForrigePeriode =
begrunnelseGrunnlagForrigePeriode?.erOrdinæreVilkårInnvilget() == true

val erIngenEndring = !erØkingIAndel && !erReduksjonIAndel && erOrdinæreVilkårOppfyltIForrigePeriode
listOfNotNull(
if (erØkingIAndel || erSøker || erIngenEndring) SanityPeriodeResultat.INNVILGET_ELLER_ØKNING else null,
if (erØkingIAndel || erSatsøkning || erSøker || erIngenEndring) SanityPeriodeResultat.INNVILGET_ELLER_ØKNING else null,
if (erReduksjonIAndel) SanityPeriodeResultat.REDUKSJON else null,
if (erIngenEndring) SanityPeriodeResultat.INGEN_ENDRING else null,
)
Expand Down Expand Up @@ -639,9 +635,20 @@ private fun erØkningIAndelMellomPerioder(
sammeAndelForrigePeriode == null && begrunnelseGrunnlagForPeriode.erInnvilgetEtterEndretUtbetaling()
val harAndelenGåttOppIProsent =
sammeAndelForrigePeriode != null && andelIPeriode.prosent > sammeAndelForrigePeriode.prosent
val erSatsenØkt = andelIPeriode.sats > (sammeAndelForrigePeriode?.sats ?: 0)

erAndelenTjent || harAndelenGåttOppIProsent || erSatsenØkt
erAndelenTjent || harAndelenGåttOppIProsent
}
}

private fun erSatsøkningMellomPerioder(
begrunnelseGrunnlagForPeriode: BegrunnelseGrunnlagForPersonIPeriode,
begrunnelseGrunnlagForrigePeriode: BegrunnelseGrunnlagForPersonIPeriode?,
): Boolean {
val andelerForrigePeriode = begrunnelseGrunnlagForrigePeriode?.andeler ?: emptyList()
val andelerDennePerioden = begrunnelseGrunnlagForPeriode.andeler
return andelerDennePerioden.any { andelIPeriode ->
val sammeAndelForrigePeriode = andelerForrigePeriode.singleOrNull { andelIPeriode.type == it.type }
sammeAndelForrigePeriode != null && andelIPeriode.sats > sammeAndelForrigePeriode.sats
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class BegrunnelseTeksterStepDefinition {
}

/**
* Mulige verdier: | AktørId | Fra dato | Til dato | BehandlingId | Årsak | Prosent | Søknadstidspunkt |
* Mulige verdier: | AktørId | Fra dato | Til dato | BehandlingId | Årsak | Prosent | Søknadstidspunkt | Avtaletidspunkt delt bosted |
*/
@Og("med endrede utbetalinger for begrunnelse")
fun `med endrede utbetalinger for begrunnelse`(dataTable: DataTable) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,65 @@ Egenskap: Gyldige begrunnelser for endret utbetaling
| 01.09.2023 | 31.03.2024 | UTBETALING | | | |
| 01.04.2024 | 31.03.2036 | UTBETALING | | | |
| 01.04.2036 | | OPPHØR | | | |


Scenario: Revurdering delt bosted, men den første måneden er endret til full utbetaling og har dermed ingen endring i beløp, skal begrunne delt bosted med full utbetaling før søknad
Gitt følgende fagsaker for begrunnelse
| FagsakId | Fagsaktype |
| 1 | NORMAL |

Gitt følgende behandling
| BehandlingId | FagsakId | ForrigeBehandlingId | Behandlingsresultat | Behandlingsårsak | Skal behandles automatisk | Behandlingskategori |
| 1 | 1 | | ENDRET_UTBETALING | SATSENDRING | Ja | NASJONAL |
| 2 | 1 | 1 | ENDRET_UTBETALING | NYE_OPPLYSNINGER | Nei | NASJONAL |

Og følgende persongrunnlag for begrunnelse
| BehandlingId | AktørId | Persontype | Fødselsdato |
| 1 | 1 | SØKER | 12.09.1978 |
| 1 | 2 | BARN | 04.04.2010 |
| 2 | 1 | SØKER | 12.09.1978 |
| 2 | 2 | BARN | 04.04.2010 |
Og følgende dagens dato 22.10.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 | Standardbegrunnelser |
| 1 | LOVLIG_OPPHOLD,BOSATT_I_RIKET | | 01.02.2022 | | OPPFYLT | Nei | |

| 2 | GIFT_PARTNERSKAP | | 04.04.2010 | | OPPFYLT | Nei | |
| 2 | UNDER_18_ÅR | | 04.04.2010 | 03.04.2028 | OPPFYLT | Nei | |
| 2 | BOSATT_I_RIKET,LOVLIG_OPPHOLD,BOR_MED_SØKER | | 01.02.2022 | | 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 | Standardbegrunnelser |
| 1 | BOSATT_I_RIKET,LOVLIG_OPPHOLD | | 01.02.2022 | | OPPFYLT | Nei | |

| 2 | UNDER_18_ÅR | | 04.04.2010 | 03.04.2028 | OPPFYLT | Nei | |
| 2 | GIFT_PARTNERSKAP | | 04.04.2010 | | OPPFYLT | Nei | |
| 2 | LOVLIG_OPPHOLD,BOSATT_I_RIKET | | 01.02.2022 | | OPPFYLT | Nei | |
| 2 | BOR_MED_SØKER | | 01.02.2022 | 29.06.2023 | OPPFYLT | Nei | |
| 2 | BOR_MED_SØKER | DELT_BOSTED | 30.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.2022 | 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.03.2028 | 1310 | ORDINÆR_BARNETRYGD | 100 | 1310 |

| 2 | 2 | 01.03.2022 | 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.07.2023 | 1310 | ORDINÆR_BARNETRYGD | 100 | 1310 |
| 2 | 2 | 01.08.2023 | 31.03.2028 | 655 | ORDINÆR_BARNETRYGD | 50 | 1310 |

Og med endrede utbetalinger for begrunnelse
| AktørId | BehandlingId | Fra dato | Til dato | Årsak | Prosent | Søknadstidspunkt | Avtaletidspunkt delt bosted |
| 2 | 2 | 01.07.2023 | 31.07.2023 | DELT_BOSTED | 100 | 02.07.2023 | 30.06.2023 |

Når vedtaksperiodene genereres for behandling 2

forvent at følgende begrunnelser er gyldige
| Fra dato | Til dato | VedtaksperiodeType | Regelverk Gyldige begrunnelser | Gyldige begrunnelser | Ugyldige begrunnelser |
| 01.07.2023 | 31.07.2023 | UTBETALING | | ENDRET_UTBETALINGSPERIODE_DELT_BOSTED_FULL_UTBETALING_FØR_SOKNAD_NY | |
| 01.08.2023 | 31.03.2028 | UTBETALING | | ETTER_ENDRET_UTBETALING_HAR_AVTALE_DELT_BOSTED | |
| 01.04.2028 | | OPPHØR | | | |
Original file line number Diff line number Diff line change
Expand Up @@ -109,24 +109,11 @@ Egenskap: Gyldige begrunnelser ved ingen endring

Og med kompetanser for begrunnelse
| AktørId | Fra dato | Til dato | Resultat | BehandlingId | Søkers aktivitet | Annen forelders aktivitet | Søkers aktivitetsland | Annen forelders aktivitetsland | Barnets bostedsland |
| 5678, 1234 | 01.04.2021 | | NORGE_ER_PRIMÆRLAND | 1 | ARBEIDER | INAKTIV | NO | LV | LV |
| 1234 | 01.08.2019 | 31.03.2021 | NORGE_ER_SEKUNDÆRLAND | 1 | ARBEIDER | I_ARBEID | NO | LV | LV |
| 5678, 1234 | 01.04.2021 | | NORGE_ER_PRIMÆRLAND | 1 | ARBEIDER | INAKTIV | NO | LV | LV |

Når vedtaksperiodene genereres for behandling 1

forvent at følgende begrunnelser er gyldige
| Fra dato | Til dato | VedtaksperiodeType | Regelverk Gyldige begrunnelser | Gyldige begrunnelser | Ugyldige begrunnelser |
| 01.02.2016 | 31.07.2019 | OPPHØR | | | |
| 01.08.2019 | 31.12.2019 | UTBETALING | | | |
| 01.01.2020 | 31.08.2020 | UTBETALING | EØS_FORORDNINGEN | INNVILGET_TILLEGGSTEKST_SATSENDRING_OG_VALUTAJUSTERING | |
| 01.09.2020 | 31.12.2020 | UTBETALING | | | |
| 01.01.2021 | 31.03.2021 | UTBETALING | | | |
| 01.04.2021 | 31.08.2021 | UTBETALING | | | |
| 01.09.2021 | 31.10.2021 | UTBETALING | | | |
| 01.11.2021 | 31.12.2021 | UTBETALING | | | |
| 01.01.2022 | 28.02.2023 | UTBETALING | | | |
| 01.03.2023 | 30.06.2023 | UTBETALING | | | |
| 01.07.2023 | 28.02.2027 | UTBETALING | | | |
| 01.03.2027 | 31.10.2033 | UTBETALING | | | |
| 01.11.2033 | 28.02.2039 | UTBETALING | | | |
| 01.03.2039 | | OPPHØR | | | |
| Fra dato | Til dato | VedtaksperiodeType | Regelverk Gyldige begrunnelser | Gyldige begrunnelser | Ugyldige begrunnelser |
| 01.09.2020 | 31.12.2020 | UTBETALING | EØS_FORORDNINGEN | INNVILGET_TILLEGGSTEKST_SATSENDRING_OG_VALUTAJUSTERING | |

Loading

0 comments on commit 2373d50

Please sign in to comment.