-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
NAV-23449: Refaktorer logikk for hjemler til en egen pakke. Forenkler…
… logikken og skriver enhetstester. (#4928) ### 💰 Hva skal gjøres, og hvorfor? Favro: https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-23449 Forenkler logikken ved å trekke ut hjemler i en egen pakke. Fordeler logikken ut over flere filer. Skriver enhetstester for den "nye" logikken. Den "nye" logikken skal i teorien produsere samme resultat som den forrige. Hensikten her er utelukkende å gjøre koden mer oversiktlig og lettere å teste. Toggle for å skru av/på refaktorert logikk slik at det kan merges uten å testes først. Toggle: https://teamfamilie-unleash-web.iap.nav.cloud.nais.io/projects/default/features/familie-ba-sak.bruk_omskriving_av_hjemler_i_brev Når toggle fjernes kan man fjerne mye "gammel" kode. ### 🔎️ 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. - [x] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv hvorfor under 👇 ### 💬 Ønsker du en muntlig gjennomgang? - [ ] Ja - [x] Nei
- Loading branch information
Showing
25 changed files
with
2,581 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/EØSForordningen883Hjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse | ||
|
||
fun utledEØSForordningen883Hjemler( | ||
sanityEøsBegrunnelser: List<SanityEØSBegrunnelse>, | ||
) = sanityEøsBegrunnelser.flatMap { it.hjemlerEØSForordningen883 }.distinct() |
18 changes: 18 additions & 0 deletions
18
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/EØSForordningen987Hjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse | ||
|
||
fun utledEØSForordningen987Hjemler( | ||
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() | ||
} |
13 changes: 13 additions & 0 deletions
13
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/FolketrygdlovenHjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityBegrunnelse | ||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse | ||
|
||
fun utledFolketrygdlovenHjemler( | ||
sanityBegrunnelser: List<SanityBegrunnelse>, | ||
sanityEøsBegrunnelser: List<SanityEØSBegrunnelse>, | ||
): List<String> { | ||
val hjemlerFolketrygdloven = sanityBegrunnelser.flatMap { it.hjemlerFolketrygdloven } | ||
val hjemlerFolketrygdlovenEøs = sanityEøsBegrunnelser.flatMap { it.hjemlerFolketrygdloven } | ||
return (hjemlerFolketrygdloven + hjemlerFolketrygdlovenEøs).distinct() | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/ForvaltningsloverHjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
fun utledForvaltningsloverHjemler(vedtakKorrigertHjemmelSkalMedIBrev: Boolean): List<String> = | ||
if (vedtakKorrigertHjemmelSkalMedIBrev) { | ||
listOf("35") | ||
} else { | ||
emptyList() | ||
} |
101 changes: 101 additions & 0 deletions
101
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/HjemlerKombinator.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.common.Feil | ||
import no.nav.familie.ba.sak.common.Utils | ||
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Målform | ||
|
||
fun kombinerHjemler( | ||
målform: Målform, | ||
separasjonsavtaleStorbritanniaHjemler: List<String>, | ||
ordinæreHjemler: List<String>, | ||
folketrygdlovenHjemler: List<String>, | ||
eøsForordningen883Hjemler: List<String>, | ||
eøsForordningen987Hjemler: List<String>, | ||
forvaltningslovenHjemler: List<String>, | ||
): List<String> { | ||
val alleHjemlerForBegrunnelser = mutableListOf<String>() | ||
|
||
// Rekkefølgen her er viktig | ||
if (separasjonsavtaleStorbritanniaHjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add( | ||
"${ | ||
when (målform) { | ||
Målform.NB -> "Separasjonsavtalen mellom Storbritannia og Norge artikkel" | ||
Målform.NN -> "Separasjonsavtalen mellom Storbritannia og Noreg artikkel" | ||
} | ||
} ${ | ||
Utils.slåSammen( | ||
separasjonsavtaleStorbritanniaHjemler, | ||
) | ||
}", | ||
) | ||
} | ||
|
||
if (ordinæreHjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add( | ||
"${ | ||
when (målform) { | ||
Målform.NB -> "barnetrygdloven" | ||
Målform.NN -> "barnetrygdlova" | ||
} | ||
} ${ | ||
hjemlerTilHjemmeltekst( | ||
hjemler = ordinæreHjemler, | ||
lovForHjemmel = "barnetrygdloven", | ||
) | ||
}", | ||
) | ||
} | ||
|
||
if (folketrygdlovenHjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add( | ||
"${ | ||
when (målform) { | ||
Målform.NB -> "folketrygdloven" | ||
Målform.NN -> "folketrygdlova" | ||
} | ||
} ${ | ||
hjemlerTilHjemmeltekst( | ||
hjemler = folketrygdlovenHjemler, | ||
lovForHjemmel = "folketrygdloven", | ||
) | ||
}", | ||
) | ||
} | ||
|
||
if (eøsForordningen883Hjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add("EØS-forordning 883/2004 artikkel ${Utils.slåSammen(eøsForordningen883Hjemler)}") | ||
} | ||
|
||
if (eøsForordningen987Hjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add("EØS-forordning 987/2009 artikkel ${Utils.slåSammen(eøsForordningen987Hjemler)}") | ||
} | ||
|
||
if (forvaltningslovenHjemler.isNotEmpty()) { | ||
alleHjemlerForBegrunnelser.add( | ||
"${ | ||
when (målform) { | ||
Målform.NB -> "forvaltningsloven" | ||
Målform.NN -> "forvaltningslova" | ||
} | ||
} ${ | ||
hjemlerTilHjemmeltekst( | ||
hjemler = forvaltningslovenHjemler, | ||
lovForHjemmel = "forvaltningsloven", | ||
) | ||
}", | ||
) | ||
} | ||
|
||
return alleHjemlerForBegrunnelser | ||
} | ||
|
||
private 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 -> "§§ ${Utils.slåSammen(hjemler)}" | ||
} |
72 changes: 72 additions & 0 deletions
72
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/HjemmeltekstUtleder.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.common.FunksjonellFeil | ||
import no.nav.familie.ba.sak.integrasjoner.sanity.SanityService | ||
import no.nav.familie.ba.sak.kjerne.brev.slåSammen | ||
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService | ||
import no.nav.familie.ba.sak.kjerne.vedtak.domene.VedtaksperiodeMedBegrunnelser | ||
import no.nav.familie.ba.sak.kjerne.vedtak.refusjonEøs.RefusjonEøsService | ||
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.VilkårsvurderingService | ||
import org.springframework.stereotype.Component | ||
|
||
@Component | ||
class HjemmeltekstUtleder( | ||
private val vilkårsvurderingService: VilkårsvurderingService, | ||
private val sanityService: SanityService, | ||
private val persongrunnlagService: PersongrunnlagService, | ||
private val refusjonEøsService: RefusjonEøsService, | ||
) { | ||
fun utledHjemmeltekst( | ||
behandlingId: Long, | ||
vedtakKorrigertHjemmelSkalMedIBrev: Boolean, | ||
sorterteVedtaksperioderMedBegrunnelser: List<VedtaksperiodeMedBegrunnelser>, | ||
): String { | ||
val vilkårsvurdering = vilkårsvurderingService.hentAktivForBehandling(behandlingId = behandlingId) | ||
if (vilkårsvurdering == null) { | ||
throw IllegalStateException("Finner ikke vilkårsvurdering ved begrunning av vedtak") | ||
} | ||
|
||
val begrunnelseTilSanityBegrunnelse = sanityService.hentSanityBegrunnelser() | ||
val eøsBegrunnelseTilSanityEøsBegrunnelse = sanityService.hentSanityEØSBegrunnelser() | ||
|
||
val sanitybegrunnelser = | ||
sorterteVedtaksperioderMedBegrunnelser.flatMap { vedtaksperiode -> | ||
vedtaksperiode.begrunnelser.mapNotNull { begrunnelse -> | ||
begrunnelseTilSanityBegrunnelse[begrunnelse.standardbegrunnelse] | ||
} | ||
} | ||
|
||
val sanityEøsBegrunnelser = | ||
sorterteVedtaksperioderMedBegrunnelser.flatMap { vedtaksperiode -> | ||
vedtaksperiode.eøsBegrunnelser.mapNotNull { eøsBegrunnelse -> | ||
eøsBegrunnelseTilSanityEøsBegrunnelse[eøsBegrunnelse.begrunnelse] | ||
} | ||
} | ||
|
||
val alleHjemlerForBegrunnelser = | ||
kombinerHjemler( | ||
målform = persongrunnlagService.hentSøkersMålform(behandlingId = behandlingId), | ||
separasjonsavtaleStorbritanniaHjemler = utledSeprasjonsavtaleStorbritanniaHjemler(sanityEøsBegrunnelser = sanityEøsBegrunnelser), | ||
ordinæreHjemler = | ||
utledOrdinæreHjemler( | ||
sanityBegrunnelser = sanitybegrunnelser, | ||
sanityEøsBegrunnelser = sanityEøsBegrunnelser, | ||
opplysningspliktHjemlerSkalMedIBrev = !vilkårsvurdering.erOpplysningspliktVilkårOppfylt(), | ||
finnesVedtaksperiodeMedFritekst = sorterteVedtaksperioderMedBegrunnelser.any { it.fritekster.isNotEmpty() }, | ||
), | ||
folketrygdlovenHjemler = utledFolketrygdlovenHjemler(sanityBegrunnelser = sanitybegrunnelser, sanityEøsBegrunnelser = sanityEøsBegrunnelser), | ||
eøsForordningen883Hjemler = utledEØSForordningen883Hjemler(sanityEøsBegrunnelser = sanityEøsBegrunnelser), | ||
eøsForordningen987Hjemler = utledEØSForordningen987Hjemler(sanityEøsBegrunnelser = sanityEøsBegrunnelser, refusjonEøsHjemmelSkalMedIBrev = refusjonEøsService.harRefusjonEøsPåBehandling(behandlingId)), | ||
forvaltningslovenHjemler = utledForvaltningsloverHjemler(vedtakKorrigertHjemmelSkalMedIBrev = vedtakKorrigertHjemmelSkalMedIBrev), | ||
) | ||
|
||
return slåSammenHjemlerAvUlikeTyper(alleHjemlerForBegrunnelser) | ||
} | ||
} | ||
|
||
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() | ||
} |
31 changes: 31 additions & 0 deletions
31
src/main/kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/OrdinæreHjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
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.hjemlerTilhørendeFritekst | ||
|
||
fun utledOrdinæreHjemler( | ||
sanityBegrunnelser: List<SanityBegrunnelse>, | ||
sanityEøsBegrunnelser: List<SanityEØSBegrunnelse>, | ||
opplysningspliktHjemlerSkalMedIBrev: Boolean, | ||
finnesVedtaksperiodeMedFritekst: Boolean, | ||
): List<String> { | ||
val ordinæreHjemler = mutableSetOf<String>() | ||
ordinæreHjemler.addAll(sanityBegrunnelser.flatMap { it.hjemler }) | ||
ordinæreHjemler.addAll(sanityEøsBegrunnelser.flatMap { it.hjemler }) | ||
|
||
if (opplysningspliktHjemlerSkalMedIBrev) { | ||
val hjemlerNårOpplysningspliktIkkeOppfylt = listOf("17", "18") | ||
ordinæreHjemler.addAll(hjemlerNårOpplysningspliktIkkeOppfylt) | ||
} | ||
|
||
if (finnesVedtaksperiodeMedFritekst) { | ||
ordinæreHjemler.addAll(hjemlerTilhørendeFritekst.map { it.toString() }) | ||
} | ||
|
||
return ordinæreHjemler | ||
.map { it.toInt() } | ||
.sorted() | ||
.map { it.toString() } | ||
.distinct() | ||
} |
8 changes: 8 additions & 0 deletions
8
...kotlin/no/nav/familie/ba/sak/kjerne/brev/hjemler/SeparasjonsavtaleStorbritanniaHjemler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package no.nav.familie.ba.sak.kjerne.brev.hjemler | ||
|
||
import no.nav.familie.ba.sak.kjerne.brev.domene.SanityEØSBegrunnelse | ||
|
||
fun utledSeprasjonsavtaleStorbritanniaHjemler(sanityEøsBegrunnelser: List<SanityEØSBegrunnelse>) = | ||
sanityEøsBegrunnelser | ||
.flatMap { it.hjemlerSeperasjonsavtalenStorbritannina } | ||
.distinct() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.