Skip to content

Commit

Permalink
NAV-24244: Fjernet toggle for hjemmel (#5063)
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-24244

Fjermer toggle, den har vært på i prod en god stund nå.

### 🔎️ Er det noe spesielt du ønsker tilbakemelding om?
Nei

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

_Jeg har ikke skrevet tester fordi:_
Ikke relevant. Tester eksiterer allerede.

### 💬 Ønsker du en muntlig gjennomgang?
- [ ] Ja
- [x] Nei
  • Loading branch information
thoalm authored Feb 10, 2025
1 parent 7fece57 commit 8b2187c
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 917 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ enum class FeatureToggle(
OPPRETT_AUTOVEDTAK_OPPDATER_KLASSEKODE_FOR_UTVIDET_BARNETRYGD_AUTOMATISK("familie-ba-sak.opprett-autovedtak-ny-klassekode-for-utvidet-barnetrygd-automatisk"),
AUTOVEDTAK_OPPDATER_KLASSEKODE_FOR_UTVIDET_BARNETRYGD_HØYT_VOLUM("familie-ba-sak.autovedtak-ny-klassekode-for-utvidet-barnetrygd-hoyt-volum"),

// NAV-23449 - Skrud av/på ny refaktorert logikk for hjemler i brev, skal i teorien produsere det samme resultatet
BRUK_OMSKRIVING_AV_HJEMLER_I_BREV("familie-ba-sak.bruk_omskriving_av_hjemler_i_brev"),

// NAV-23733
BRUK_OVERSTYRING_AV_FOM_SISTE_ANDEL_UTVIDET("familie-ba-sak.bruk-overstyring-av-fom-siste-andel-utvidet"),

Expand Down
68 changes: 8 additions & 60 deletions src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/BrevService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,10 @@ import no.nav.familie.ba.sak.common.Utils.storForbokstavIAlleNavn
import no.nav.familie.ba.sak.common.secureLogger
import no.nav.familie.ba.sak.common.tilDagMånedÅr
import no.nav.familie.ba.sak.common.toLocalDate
import no.nav.familie.ba.sak.config.FeatureToggle
import no.nav.familie.ba.sak.config.featureToggle.UnleashNextMedContextService
import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient
import no.nav.familie.ba.sak.integrasjoner.organisasjon.OrganisasjonService
import no.nav.familie.ba.sak.integrasjoner.sanity.SanityService
import no.nav.familie.ba.sak.internal.TestVerktøyService
import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.ArbeidsfordelingService
import no.nav.familie.ba.sak.kjerne.autovedtak.fødselshendelse.Resultat
import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingÅrsak
import no.nav.familie.ba.sak.kjerne.behandlingsresultat.BehandlingsresultatOpphørUtils.filtrerBortIrrelevanteAndeler
Expand Down Expand Up @@ -58,7 +54,6 @@ import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.EndretUtbetalingAnde
import no.nav.familie.ba.sak.kjerne.eøs.kompetanse.KompetanseRepository
import no.nav.familie.ba.sak.kjerne.eøs.utenlandskperiodebeløp.UtenlandskPeriodebeløpRepository
import no.nav.familie.ba.sak.kjerne.eøs.valutakurs.ValutakursRepository
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Målform
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlag
import no.nav.familie.ba.sak.kjerne.korrigertetterbetaling.KorrigertEtterbetalingService
Expand All @@ -69,12 +64,9 @@ import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.MånedTidspunkt.Companio
import no.nav.familie.ba.sak.kjerne.totrinnskontroll.TotrinnskontrollService
import no.nav.familie.ba.sak.kjerne.totrinnskontroll.domene.Totrinnskontroll
import no.nav.familie.ba.sak.kjerne.vedtak.Vedtak
import no.nav.familie.ba.sak.kjerne.vedtak.domene.VedtaksperiodeMedBegrunnelser
import no.nav.familie.ba.sak.kjerne.vedtak.refusjonEøs.RefusjonEøsRepository
import no.nav.familie.ba.sak.kjerne.vedtak.sammensattKontrollsak.SammensattKontrollsak
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.VedtaksperiodeService
import no.nav.familie.ba.sak.kjerne.vedtak.vedtaksperiode.Vedtaksperiodetype
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.VilkårsvurderingService
import no.nav.familie.ba.sak.sikkerhet.SaksbehandlerContext
import org.springframework.stereotype.Service
import java.math.BigDecimal
Expand All @@ -87,14 +79,11 @@ class BrevService(
private val arbeidsfordelingService: ArbeidsfordelingService,
private val simuleringService: SimuleringService,
private val vedtaksperiodeService: VedtaksperiodeService,
private val sanityService: SanityService,
private val vilkårsvurderingService: VilkårsvurderingService,
private val korrigertEtterbetalingService: KorrigertEtterbetalingService,
private val organisasjonService: OrganisasjonService,
private val korrigertVedtakService: KorrigertVedtakService,
private val saksbehandlerContext: SaksbehandlerContext,
private val brevmalService: BrevmalService,
private val refusjonEøsRepository: RefusjonEøsRepository,
private val integrasjonClient: IntegrasjonClient,
private val testVerktøyService: TestVerktøyService,
private val andelTilkjentYtelseRepository: AndelTilkjentYtelseRepository,
Expand All @@ -103,7 +92,6 @@ class BrevService(
private val valutakursRepository: ValutakursRepository,
private val endretUtbetalingAndelRepository: EndretUtbetalingAndelRepository,
private val hjemmeltekstUtleder: HjemmeltekstUtleder,
private val unleashService: UnleashNextMedContextService,
) {
fun hentVedtaksbrevData(vedtak: Vedtak): Vedtaksbrev {
val behandling = vedtak.behandling
Expand Down Expand Up @@ -446,7 +434,6 @@ class BrevService(
val grunnlagOgSignaturData = hentGrunnlagOgSignaturData(vedtak)

val behandlingId = vedtak.behandling.id
val personopplysningGrunnlag = persongrunnlagService.hentAktivThrows(behandlingId = behandlingId)

val grunnlagForBegrunnelser = vedtaksperiodeService.hentGrunnlagForBegrunnelse(vedtak.behandling)
val brevperioder =
Expand All @@ -470,25 +457,13 @@ class BrevService(
val utbetalingerPerMndEøs = hentUtbetalingerPerMndEøs(vedtak)

val korrigertVedtak = korrigertVedtakService.finnAktivtKorrigertVedtakPåBehandling(behandlingId)
val refusjonEøs = refusjonEøsRepository.finnRefusjonEøsForBehandling(behandlingId)

val hjemler =
if (unleashService.isEnabled(FeatureToggle.BRUK_OMSKRIVING_AV_HJEMLER_I_BREV, false)) {
hjemmeltekstUtleder.utledHjemmeltekst(
behandlingId = behandlingId,
vedtakKorrigertHjemmelSkalMedIBrev = korrigertVedtak != null,
sorterteVedtaksperioderMedBegrunnelser = sorterteVedtaksperioderMedBegrunnelser,
)
} else {
hentHjemler(
behandlingId = behandlingId,
erFritekstIBrev = sorterteVedtaksperioderMedBegrunnelser.any { it.fritekster.isNotEmpty() },
vedtaksperioder = sorterteVedtaksperioderMedBegrunnelser,
målform = personopplysningGrunnlag.søker.målform,
vedtakKorrigertHjemmelSkalMedIBrev = korrigertVedtak != null,
refusjonEøsHjemmelSkalMedIBrev = refusjonEøs.isNotEmpty(),
)
}

val hjemmeltekst =
hjemmeltekstUtleder.utledHjemmeltekst(
behandlingId = behandlingId,
vedtakKorrigertHjemmelSkalMedIBrev = korrigertVedtak != null,
sorterteVedtaksperioderMedBegrunnelser = sorterteVedtaksperioderMedBegrunnelser,
)

val organisasjonsnummer =
vedtak.behandling.fagsak.institusjon
Expand All @@ -499,7 +474,7 @@ class BrevService(
enhet = grunnlagOgSignaturData.enhet,
saksbehandler = grunnlagOgSignaturData.saksbehandler,
beslutter = grunnlagOgSignaturData.beslutter,
hjemmeltekst = Hjemmeltekst(hjemler),
hjemmeltekst = Hjemmeltekst(hjemmeltekst),
søkerNavn = organisasjonsnavn ?: grunnlagOgSignaturData.grunnlag.søker.navn,
søkerFødselsnummer =
grunnlagOgSignaturData.grunnlag.søker.aktør
Expand Down Expand Up @@ -543,33 +518,6 @@ class BrevService(
)
}

private fun hentHjemler(
behandlingId: Long,
vedtaksperioder: List<VedtaksperiodeMedBegrunnelser>,
lform: Målform,
vedtakKorrigertHjemmelSkalMedIBrev: Boolean = false,
refusjonEøsHjemmelSkalMedIBrev: Boolean,
erFritekstIBrev: Boolean,
): String {
val vilkårsvurdering =
vilkårsvurderingService.hentAktivForBehandling(behandlingId = behandlingId)
?: error("Finner ikke vilkårsvurdering ved begrunning av vedtak")

val opplysningspliktHjemlerSkalMedIBrev =
vilkårsvurdering.finnOpplysningspliktVilkår()?.resultat == Resultat.IKKE_OPPFYLT

return hentHjemmeltekst(
vedtaksperioder = vedtaksperioder,
standardbegrunnelseTilSanityBegrunnelse = sanityService.hentSanityBegrunnelser(),
eøsStandardbegrunnelseTilSanityBegrunnelse = sanityService.hentSanityEØSBegrunnelser(),
opplysningspliktHjemlerSkalMedIBrev = opplysningspliktHjemlerSkalMedIBrev,
målform = målform,
vedtakKorrigertHjemmelSkalMedIBrev = vedtakKorrigertHjemmelSkalMedIBrev,
refusjonEøsHjemmelSkalMedIBrev = refusjonEøsHjemmelSkalMedIBrev,
erFritekstIBrev = erFritekstIBrev,
)
}

private fun hentAktivtPersonopplysningsgrunnlag(behandlingId: Long) = persongrunnlagService.hentAktivThrows(behandlingId = behandlingId)

private fun hentEtterbetaling(vedtak: Vedtak): Etterbetaling? = hentEtterbetalingsbeløp(vedtak)?.let { Etterbetaling(it) }
Expand Down
179 changes: 0 additions & 179 deletions src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/BrevUtil.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.nav.familie.ba.sak.kjerne.brev

import no.nav.familie.ba.sak.common.Feil
import no.nav.familie.ba.sak.common.FunksjonellFeil
import no.nav.familie.ba.sak.common.TIDENES_ENDE
import no.nav.familie.ba.sak.common.TIDENES_MORGEN
import no.nav.familie.ba.sak.common.Utils.slåSammen
Expand All @@ -21,8 +20,6 @@ import no.nav.familie.ba.sak.kjerne.behandlingsresultat.BehandlingsresultatOpph
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.beregning.domene.tilTidslinjerPerAktørOgType
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.brev.domene.maler.UtbetalingstabellAutomatiskValutajustering
import no.nav.familie.ba.sak.kjerne.brev.domene.maler.utbetalingEøs.AndelUpbOgValutakurs
Expand All @@ -39,7 +36,6 @@ import no.nav.familie.ba.sak.kjerne.eøs.utenlandskperiodebeløp.UtenlandskPerio
import no.nav.familie.ba.sak.kjerne.eøs.utenlandskperiodebeløp.tilUtbetaltFraAnnetLand
import no.nav.familie.ba.sak.kjerne.eøs.valutakurs.Valutakurs
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.personident.Aktør
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.erIkkeTom
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.kombiner
Expand All @@ -50,9 +46,6 @@ import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.MånedTidspunkt.Companio
import no.nav.familie.ba.sak.kjerne.tidslinje.tidspunkt.tilYearMonth
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.beskjærFraOgMed
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.mapIkkeNull
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.EØSStandardbegrunnelse
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.domene.VedtaksperiodeMedBegrunnelser
import tilLandNavn
import java.time.LocalDate
Expand Down Expand Up @@ -100,176 +93,6 @@ fun hentOverstyrtDokumenttittel(behandling: Behandling): String? =
null
}

fun hjemlerTilHjemmeltekst(
hjemler: List<String>,
lovForHjemmel: String,
): String =
when (hjemler.size) {
0 -> throw Feil("Kan ikke lage hjemmeltekst for $lovForHjemmel når ingen begrunnelser har hjemler fra $lovForHjemmel knyttet til seg.")
1 -> "§ ${hjemler[0]}"
else -> "§§ ${hjemler.slåSammen()}"
}

fun hentHjemmeltekst(
vedtaksperioder: List<VedtaksperiodeMedBegrunnelser>,
standardbegrunnelseTilSanityBegrunnelse: Map<Standardbegrunnelse, SanityBegrunnelse>,
sStandardbegrunnelseTilSanityBegrunnelse: Map<EØSStandardbegrunnelse, SanityEØSBegrunnelse>,
opplysningspliktHjemlerSkalMedIBrev: Boolean = false,
lform: Målform,
vedtakKorrigertHjemmelSkalMedIBrev: Boolean = false,
refusjonEøsHjemmelSkalMedIBrev: Boolean = false,
erFritekstIBrev: Boolean,
): String {
val sanityStandardbegrunnelser =
vedtaksperioder.flatMap { vedtaksperiode -> vedtaksperiode.begrunnelser.mapNotNull { begrunnelse -> standardbegrunnelseTilSanityBegrunnelse[begrunnelse.standardbegrunnelse] } }
val sanityEøsBegrunnelser =
vedtaksperioder.flatMap { vedtaksperiode -> vedtaksperiode.eøsBegrunnelser.mapNotNull { eøsBegrunnelse -> eøsStandardbegrunnelseTilSanityBegrunnelse[eøsBegrunnelse.begrunnelse] } }

val ordinæreHjemler =
hentOrdinæreHjemler(
hjemler =
(sanityStandardbegrunnelser.flatMap { it.hjemler } + sanityEøsBegrunnelser.flatMap { it.hjemler })
.toMutableSet(),
opplysningspliktHjemlerSkalMedIBrev = opplysningspliktHjemlerSkalMedIBrev,
finnesVedtaksperiodeMedFritekst = erFritekstIBrev,
)

val forvaltningsloverHjemler = hentForvaltningsloverHjemler(vedtakKorrigertHjemmelSkalMedIBrev)

val alleHjemlerForBegrunnelser =
hentAlleTyperHjemler(
hjemlerSeparasjonsavtaleStorbritannia =
sanityEøsBegrunnelser
.flatMap { it.hjemlerSeperasjonsavtalenStorbritannina }
.distinct(),
ordinæreHjemler = ordinæreHjemler.distinct(),
hjemlerFraFolketrygdloven =
(sanityStandardbegrunnelser.flatMap { it.hjemlerFolketrygdloven } + sanityEøsBegrunnelser.flatMap { it.hjemlerFolketrygdloven })
.distinct(),
hjemlerEØSForordningen883 = sanityEøsBegrunnelser.flatMap { it.hjemlerEØSForordningen883 }.distinct(),
hjemlerEØSForordningen987 = hentHjemlerForEøsForordningen987(sanityEøsBegrunnelser, refusjonEøsHjemmelSkalMedIBrev),
målform = målform,
hjemlerFraForvaltningsloven = forvaltningsloverHjemler,
)

return slåSammenHjemlerAvUlikeTyper(alleHjemlerForBegrunnelser)
}

private fun hentHjemlerForEøsForordningen987(
sanityEøsBegrunnelser: List<SanityEØSBegrunnelse>,
refusjonEøsHjemmelSkalMedIBrev: Boolean,
): List<String> {
val hjemler = mutableListOf<String>()

hjemler.addAll(sanityEøsBegrunnelser.flatMap { it.hjemlerEØSForordningen987 })

if (refusjonEøsHjemmelSkalMedIBrev) {
hjemler.add("60")
}

return hjemler.distinct()
}

private fun slåSammenHjemlerAvUlikeTyper(hjemler: List<String>) =
when (hjemler.size) {
0 -> throw FunksjonellFeil("Ingen hjemler var knyttet til begrunnelsen(e) som er valgt. Du må velge minst én begrunnelse som er knyttet til en hjemmel.")
1 -> hjemler.single()
else -> hjemler.slåSammen()
}

private fun hentAlleTyperHjemler(
hjemlerSeparasjonsavtaleStorbritannia: List<String>,
ordinæreHjemler: List<String>,
hjemlerFraFolketrygdloven: List<String>,
hjemlerEØSForordningen883: List<String>,
hjemlerEØSForordningen987: List<String>,
lform: Målform,
hjemlerFraForvaltningsloven: List<String>,
): List<String> {
val alleHjemlerForBegrunnelser = mutableListOf<String>()

// Rekkefølgen her er viktig
if (hjemlerSeparasjonsavtaleStorbritannia.isNotEmpty()) {
alleHjemlerForBegrunnelser.add(
"${
when (målform) {
Målform.NB -> "Separasjonsavtalen mellom Storbritannia og Norge artikkel"
Målform.NN -> "Separasjonsavtalen mellom Storbritannia og Noreg artikkel"
}
} ${
hjemlerSeparasjonsavtaleStorbritannia.slåSammen()
}",
)
}
if (ordinæreHjemler.isNotEmpty()) {
alleHjemlerForBegrunnelser.add(
"${
when (målform) {
Målform.NB -> "barnetrygdloven"
Målform.NN -> "barnetrygdlova"
}
} ${
hjemlerTilHjemmeltekst(
hjemler = ordinæreHjemler,
lovForHjemmel = "barnetrygdloven",
)
}",
)
}
if (hjemlerFraFolketrygdloven.isNotEmpty()) {
alleHjemlerForBegrunnelser.add(
"${
when (målform) {
Målform.NB -> "folketrygdloven"
Målform.NN -> "folketrygdlova"
}
} ${
hjemlerTilHjemmeltekst(
hjemler = hjemlerFraFolketrygdloven,
lovForHjemmel = "folketrygdloven",
)
}",
)
}
if (hjemlerEØSForordningen883.isNotEmpty()) {
alleHjemlerForBegrunnelser.add("EØS-forordning 883/2004 artikkel ${hjemlerEØSForordningen883.slåSammen()}")
}
if (hjemlerEØSForordningen987.isNotEmpty()) {
alleHjemlerForBegrunnelser.add("EØS-forordning 987/2009 artikkel ${hjemlerEØSForordningen987.slåSammen()}")
}
if (hjemlerFraForvaltningsloven.isNotEmpty()) {
alleHjemlerForBegrunnelser.add(
"${
when (målform) {
Målform.NB -> "forvaltningsloven"
Målform.NN -> "forvaltningslova"
}
} ${
hjemlerTilHjemmeltekst(hjemler = hjemlerFraForvaltningsloven, lovForHjemmel = "forvaltningsloven")
}",
)
}
return alleHjemlerForBegrunnelser
}

private fun hentOrdinæreHjemler(
hjemler: MutableSet<String>,
opplysningspliktHjemlerSkalMedIBrev: Boolean,
finnesVedtaksperiodeMedFritekst: Boolean,
): List<String> {
if (opplysningspliktHjemlerSkalMedIBrev) {
val hjemlerNårOpplysningspliktIkkeOppfylt = listOf("17", "18")
hjemler.addAll(hjemlerNårOpplysningspliktIkkeOppfylt)
}

if (finnesVedtaksperiodeMedFritekst) {
hjemler.addAll(hjemlerTilhørendeFritekst.map { it.toString() }.toSet())
}

val sorterteHjemler = hjemler.map { it.toInt() }.sorted().map { it.toString() }
return sorterteHjemler
}

fun hentVirkningstidspunktForDødsfallbrev(
opphørsperioder: List<VedtaksperiodeMedBegrunnelser>,
behandlingId: Long,
Expand All @@ -285,8 +108,6 @@ fun hentVirkningstidspunktForDødsfallbrev(
return virkningstidspunkt.tilMånedÅr()
}

fun hentForvaltningsloverHjemler(vedtakKorrigertHjemmelSkalMedIBrev: Boolean): List<String> = if (vedtakKorrigertHjemmelSkalMedIBrev) listOf("35") else emptyList()

fun skalHenteUtbetalingerEøs(
endringstidspunkt: LocalDate,
valutakurser: List<Valutakurs>,
Expand Down
Loading

0 comments on commit 8b2187c

Please sign in to comment.