Skip to content

Commit

Permalink
Legg til vedtakPeriodeType på ISanityBegrunnelse (#3993)
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-15518)

Ordlyden til en begrunnelse er knyttet til om den skal brukes sammen med
"får du" eller "får du ikke". Vi trenger derfor å kunne filtrere på
periodetypen slik at rett begrunnelse kommer til rett tid.

Endrer så begrunnelsene kun kommer opp dersom de matcher periodetypen
som nå kan velges i Sanity

![image](https://github.com/navikt/familie-ba-sak/assets/17828446/37dfe569-c092-4971-bb00-dc7ff1a0f75c)


### 🔎️ Er det noe spesielt du ønsker tilbakemelding om?
_Er det noe du er usikker på eller ønsker å diskutere? Beskriv det
gjerne her eller kommenter koden det gjelder._

### ✅ 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. Hvis du ikke har skrevet tester, beskriv
hvorfor under 👇

_Jeg har ikke skrevet tester fordi:_

### 💬 Ønsker du en muntlig gjennomgang?
- [ ] Ja
- [ ] Nei
  • Loading branch information
halvorbmundal authored Sep 26, 2023
1 parent b4d4f76 commit e9dce22
Show file tree
Hide file tree
Showing 36 changed files with 627 additions and 16,016 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import no.nav.familie.ba.sak.common.Feil
import no.nav.familie.ba.sak.common.kallEksternTjeneste
import no.nav.familie.ba.sak.kjerne.brev.domene.RestSanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.RestSanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.task.OpprettTaskService
import org.springframework.beans.factory.annotation.Value
import org.springframework.retry.annotation.Backoff
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package no.nav.familie.ba.sak.integrasjoner.sanity

import no.nav.familie.ba.sak.kjerne.brev.domene.ISanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.IVedtakBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import org.slf4j.LoggerFactory
import org.springframework.cache.annotation.Cacheable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingType
import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandlingsresultat
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.VedtakRepository
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.domene.EØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.domene.Vedtaksbegrunnelse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import no.nav.familie.ba.sak.kjerne.brev.domene.eøs.hentKompetanserForEØSBegru
import no.nav.familie.ba.sak.kjerne.brev.domene.maler.BrevPeriodeType
import no.nav.familie.ba.sak.kjerne.brev.domene.maler.brevperioder.BrevPeriode
import no.nav.familie.ba.sak.kjerne.brev.domene.totaltUtbetalt
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.Årsak
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Målform
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
Expand All @@ -32,6 +33,7 @@ import no.nav.familie.ba.sak.kjerne.vedtak.domene.EØSBegrunnelseDataMedKompetan
import no.nav.familie.ba.sak.kjerne.vedtak.domene.EØSBegrunnelseDataUtenKompetanse
import no.nav.familie.ba.sak.kjerne.vedtak.domene.FritekstBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.domene.MinimertRestPerson
import no.nav.familie.ba.sak.kjerne.vedtak.domene.hentBrevPeriodeType
import no.nav.familie.ba.sak.kjerne.vedtak.domene.tilBrevBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.Vedtaksperiodetype
import java.time.LocalDate
Expand Down Expand Up @@ -228,7 +230,11 @@ class BrevPeriodeGenerator(

val utbetalingsbeløp = minimertVedtaksperiode.minimerteUtbetalingsperiodeDetaljer.totaltUtbetalt()
val brevPeriodeType = if (skalBrukeNyBegrunnelseLogikk) {
hentPeriodeType(utbetalingsbeløp, minimertVedtaksperiode.fom)
hentBrevPeriodeType(
vedtaksperiodetype = minimertVedtaksperiode.type,
fom = minimertVedtaksperiode.fom,
erUtbetalingEllerDeltBostedIPeriode = minimertVedtaksperiode.minimerteUtbetalingsperiodeDetaljer.any { it.endringsårsak == Årsak.DELT_BOSTED || it.utbetaltPerMnd > 0 },
)
} else {
hentPeriodeTypeGammel(utbetalingsbeløp, minimertVedtaksperiode.fom, barnMedUtbetaling)
}
Expand Down Expand Up @@ -293,23 +299,6 @@ class BrevPeriodeGenerator(
}
}

private fun hentPeriodeType(
utbetalingsbeløp: Int,
fom: LocalDate?,
): BrevPeriodeType =
when (minimertVedtaksperiode.type) {
Vedtaksperiodetype.FORTSATT_INNVILGET -> BrevPeriodeType.FORTSATT_INNVILGET_NY
Vedtaksperiodetype.UTBETALING -> when {
utbetalingsbeløp == 0 -> BrevPeriodeType.INGEN_UTBETALING
else -> BrevPeriodeType.UTBETALING
}

Vedtaksperiodetype.AVSLAG -> if (fom != null) BrevPeriodeType.INGEN_UTBETALING else BrevPeriodeType.INGEN_UTBETALING_UTEN_PERIODE
Vedtaksperiodetype.OPPHØR -> BrevPeriodeType.INGEN_UTBETALING
Vedtaksperiodetype.UTBETALING_MED_REDUKSJON_FRA_SIST_IVERKSATTE_BEHANDLING -> BrevPeriodeType.UTBETALING
Vedtaksperiodetype.ENDRET_UTBETALING -> throw Feil("Endret utbetaling skal ikke benyttes lenger.")
}

@Deprecated("Erstattes av hentPeriodeType etter at ny begrunnelse logikk er produksjonsatt")
private fun hentPeriodeTypeGammel(
utbetalingsbeløp: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import no.nav.familie.ba.sak.kjerne.beregning.endringstidspunkt.hentPerioderMedE
import no.nav.familie.ba.sak.kjerne.brev.domene.BrevperiodeData
import no.nav.familie.ba.sak.kjerne.brev.domene.RestBehandlingsgrunnlagForBrev
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.tilMinimertKompetanse
import no.nav.familie.ba.sak.kjerne.brev.domene.tilMinimertUregistrertBarn
import no.nav.familie.ba.sak.kjerne.brev.domene.tilMinimertVedtaksperiode
Expand All @@ -27,7 +28,6 @@ import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Personopplysning
import no.nav.familie.ba.sak.kjerne.grunnlag.søknad.SøknadGrunnlagService
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.domene.tilMinimertePersoner
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.dødeBarnForrigePeriode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandlingsresultat.INNVIL
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak
import no.nav.familie.ba.sak.kjerne.brev.domene.MinimertVedtaksperiode
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.maler.Brevmal
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakStatus
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Målform
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.hjemlerTilhørendeFritekst
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.Opphørsperiode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import no.nav.familie.ba.sak.common.tilMånedÅr
import no.nav.familie.ba.sak.kjerne.beregning.domene.YtelseType
import no.nav.familie.ba.sak.kjerne.brev.domene.ISanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse
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.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.IVedtakBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.VedtakBegrunnelseType
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.erAvslagUregistrerteBarnBegrunnelse
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package no.nav.familie.ba.sak.kjerne.brev.domene

import no.nav.familie.ba.sak.kjerne.brev.domene.maler.BrevPeriodeType
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.Årsak
import no.nav.familie.ba.sak.kjerne.eøs.kompetanse.domene.KompetanseAktivitet
import no.nav.familie.ba.sak.kjerne.eøs.kompetanse.domene.KompetanseResultat
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.BarnetsBostedsland
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.TriggesAv
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkår

sealed interface ISanityBegrunnelse {
val apiNavn: String
val navnISystem: String
val periodeResultat: SanityPeriodeResultat?
val vilkår: Set<Vilkår>
val borMedSokerTriggere: List<VilkårTrigger>
val giftPartnerskapTriggere: List<VilkårTrigger>
val bosattIRiketTriggere: List<VilkårTrigger>
val lovligOppholdTriggere: List<VilkårTrigger>
val utvidetBarnetrygdTriggere: List<UtvidetBarnetrygdTrigger>
val fagsakType: FagsakType?
val tema: Tema?
val valgbarhet: Valgbarhet?
val periodeType: BrevPeriodeType?

val gjelderEtterEndretUtbetaling
get() = this is SanityBegrunnelse &&
this.endretUtbetalingsperiodeTriggere.contains(EndretUtbetalingsperiodeTrigger.ETTER_ENDRET_UTBETALINGSPERIODE)

val gjelderEndretutbetaling
get() = this is SanityBegrunnelse &&
this.endringsaarsaker.isNotEmpty() && !gjelderEtterEndretUtbetaling()

val gjelderSatsendring
get() = this is SanityBegrunnelse &&
ØvrigTrigger.SATSENDRING in this.ovrigeTriggere
}

data class SanityBegrunnelse(
override val apiNavn: String,
override val navnISystem: String,
override val periodeResultat: SanityPeriodeResultat? = null,
override val vilkår: Set<Vilkår> = emptySet(),
override val lovligOppholdTriggere: List<VilkårTrigger> = emptyList(),
override val bosattIRiketTriggere: List<VilkårTrigger> = emptyList(),
override val giftPartnerskapTriggere: List<VilkårTrigger> = emptyList(),
override val borMedSokerTriggere: List<VilkårTrigger> = emptyList(),
override val utvidetBarnetrygdTriggere: List<UtvidetBarnetrygdTrigger> = emptyList(),
override val fagsakType: FagsakType? = null,
override val tema: Tema? = null,
override val valgbarhet: Valgbarhet? = null,
override val periodeType: BrevPeriodeType? = null,
@Deprecated("Bruk vilkår")
val vilkaar: List<SanityVilkår> = emptyList(),
val rolle: List<VilkårRolle> = emptyList(),
val ovrigeTriggere: List<ØvrigTrigger> = emptyList(),
val hjemler: List<String> = emptyList(),
val hjemlerFolketrygdloven: List<String> = emptyList(),
val endringsaarsaker: List<Årsak> = emptyList(),
val endretUtbetalingsperiodeDeltBostedUtbetalingTrigger: EndretUtbetalingsperiodeDeltBostedTriggere? = null,
val endretUtbetalingsperiodeTriggere: List<EndretUtbetalingsperiodeTrigger> = emptyList(),
) : ISanityBegrunnelse {

val triggesAv: TriggesAv by lazy { this.tilTriggesAv() }

fun gjelderEtterEndretUtbetaling() =
this.endretUtbetalingsperiodeTriggere.contains(EndretUtbetalingsperiodeTrigger.ETTER_ENDRET_UTBETALINGSPERIODE)
}

data class SanityEØSBegrunnelse(
override val apiNavn: String,
override val navnISystem: String,
override val periodeResultat: SanityPeriodeResultat? = null,
override val vilkår: Set<Vilkår>,
override val fagsakType: FagsakType?,
override val tema: Tema?,
override val periodeType: BrevPeriodeType?,
val annenForeldersAktivitet: List<KompetanseAktivitet>,
val barnetsBostedsland: List<BarnetsBostedsland>,
val kompetanseResultat: List<KompetanseResultat>,
val hjemler: List<String>,
val hjemlerFolketrygdloven: List<String>,
val hjemlerEØSForordningen883: List<String>,
val hjemlerEØSForordningen987: List<String>,
val hjemlerSeperasjonsavtalenStorbritannina: List<String>,
) : 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()
}

private fun SanityBegrunnelse.tilTriggesAv(): TriggesAv {
return TriggesAv(
vilkår = this.vilkaar.map { it.tilVilkår() }.toSet(),
personTyper = if (this.rolle.isEmpty()) {
when {
this.inneholderVilkår(SanityVilkår.BOSATT_I_RIKET) -> setOf(PersonType.BARN, PersonType.SØKER)
this.inneholderVilkår(SanityVilkår.LOVLIG_OPPHOLD) -> setOf(PersonType.BARN, PersonType.SØKER)
this.inneholderVilkår(SanityVilkår.GIFT_PARTNERSKAP) -> setOf(PersonType.BARN)
this.inneholderVilkår(SanityVilkår.UNDER_18_ÅR) -> setOf(PersonType.BARN)
this.inneholderVilkår(SanityVilkår.BOR_MED_SOKER) -> setOf(PersonType.BARN)
else -> setOf(PersonType.BARN, PersonType.SØKER)
}
} else {
this.rolle.map { it.tilPersonType() }.toSet()
},
personerManglerOpplysninger = this.inneholderØvrigTrigger(ØvrigTrigger.MANGLER_OPPLYSNINGER),
satsendring = this.inneholderØvrigTrigger(ØvrigTrigger.SATSENDRING),
barnMedSeksårsdag = this.inneholderØvrigTrigger(ØvrigTrigger.BARN_MED_6_ÅRS_DAG),
vurderingAnnetGrunnlag = (
this.inneholderLovligOppholdTrigger(VilkårTrigger.VURDERING_ANNET_GRUNNLAG) ||
this.inneholderBosattIRiketTrigger(VilkårTrigger.VURDERING_ANNET_GRUNNLAG) ||
this.inneholderGiftPartnerskapTrigger(VilkårTrigger.VURDERING_ANNET_GRUNNLAG) ||
this.inneholderBorMedSøkerTrigger(VilkårTrigger.VURDERING_ANNET_GRUNNLAG)
),
medlemskap = this.inneholderBosattIRiketTrigger(VilkårTrigger.MEDLEMSKAP),
deltbosted = this.inneholderBorMedSøkerTrigger(VilkårTrigger.DELT_BOSTED),
deltBostedSkalIkkeDeles = this.inneholderBorMedSøkerTrigger(VilkårTrigger.DELT_BOSTED_SKAL_IKKE_DELES),
valgbar = !this.inneholderØvrigTrigger(ØvrigTrigger.ALLTID_AUTOMATISK),
valgbarhet = this.valgbarhet,
etterEndretUtbetaling = this.endretUtbetalingsperiodeTriggere
.contains(EndretUtbetalingsperiodeTrigger.ETTER_ENDRET_UTBETALINGSPERIODE) ?: false,
endretUtbetalingSkalUtbetales = this.endretUtbetalingsperiodeDeltBostedUtbetalingTrigger
?: EndretUtbetalingsperiodeDeltBostedTriggere.UTBETALING_IKKE_RELEVANT,
endringsaarsaker = this.endringsaarsaker.toSet(),
småbarnstillegg = this.inneholderUtvidetBarnetrygdTrigger(UtvidetBarnetrygdTrigger.SMÅBARNSTILLEGG),
gjelderFørstePeriode = this.inneholderØvrigTrigger(ØvrigTrigger.GJELDER_FØRSTE_PERIODE),
gjelderFraInnvilgelsestidspunkt = this.inneholderØvrigTrigger(ØvrigTrigger.GJELDER_FRA_INNVILGELSESTIDSPUNKT),
barnDød = this.inneholderØvrigTrigger(ØvrigTrigger.BARN_DØD),
)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.familie.ba.sak.kjerne.brev.domene

import no.nav.familie.ba.sak.kjerne.beregning.domene.YtelseType
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.Årsak
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.vedtak.domene.MinimertRestPerson
import no.nav.familie.ba.sak.kjerne.vedtak.domene.tilMinimertPerson
Expand All @@ -12,6 +13,7 @@ data class MinimertUtbetalingsperiodeDetalj(
val ytelseType: YtelseType,
val utbetaltPerMnd: Int,
val erPåvirketAvEndring: Boolean,
val endringsårsak: Årsak?,
val prosent: BigDecimal,
)

Expand All @@ -21,6 +23,7 @@ fun UtbetalingsperiodeDetalj.tilMinimertUtbetalingsperiodeDetalj() = MinimertUtb
utbetaltPerMnd = this.utbetaltPerMnd,
erPåvirketAvEndring = this.erPåvirketAvEndring,
prosent = this.prosent,
endringsårsak = this.endringsårsak,
)

fun List<MinimertUtbetalingsperiodeDetalj>.antallBarn(): Int =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import no.nav.familie.ba.sak.config.FeatureToggleService
import no.nav.familie.ba.sak.kjerne.brev.domene.eøs.EØSBegrunnelseMedTriggere
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Målform
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.SanityEØSBegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.Standardbegrunnelse
import no.nav.familie.ba.sak.kjerne.vedtak.domene.tilBrevPeriodeTestPerson
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.Vedtaksperiodetype
Expand Down
Loading

0 comments on commit e9dce22

Please sign in to comment.