-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
### 💰 Hva skal gjøres, og hvorfor? For å kunne begynne å behandle saker med barn født i 2024, legger vi her inn støtte for å kunne behandle alle fagsaker hvor ingen barn med ulike lovverk overlapper. To barn overlapper dersom det er mindre enn 7 måneder mellom de og et av barna treffer lovverk før februar 2025 og det andre treffer lovverk etter 2025. Dette er svært lite sannsynlig at vil kunne skje, og er muligens noe vi aldri kommer til å støtte fullt ut. Løsningen ligner litt på hvordan eksisterende forskyvning gjøres for `LOVVERK_FØR_FEBRUAR_2025`. Vi forskyver søkers vilkår etter alle lovverk og kombinerer resultatene ved å "klippe og lime" i overgangen mellom ulike lovverk ved hjelp av en lovverk-tidslinje. Nå er forskyvningen av søkers vilkår tett knyttet mot barnas vilkår, og det må alltid finnes `PersonResultater` for søker og minst ett barn ved forskyvning. En rekke tester er korrigert som følge av dette. ### ✅ Checklist - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. - [x] Jeg har skrevet tester. ### 💬 Ønsker du en muntlig gjennomgang? - [ ] Ja - [ ] Nei
- Loading branch information
1 parent
8c64988
commit 48fa1a4
Showing
19 changed files
with
900 additions
and
173 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
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
88 changes: 88 additions & 0 deletions
88
...e/ks/sak/kjerne/behandling/steg/vilkårsvurdering/forskyvning/LovverkTidslinjeGenerator.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,88 @@ | ||
package no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.forskyvning | ||
|
||
import no.nav.familie.ks.sak.common.exception.Feil | ||
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Vilkår | ||
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.VilkårResultat | ||
import no.nav.familie.ks.sak.kjerne.lovverk.Lovverk | ||
import no.nav.familie.ks.sak.kjerne.lovverk.LovverkUtleder | ||
import no.nav.familie.ks.sak.kjerne.personident.Aktør | ||
import no.nav.familie.ks.sak.kjerne.personopplysninggrunnlag.domene.Person | ||
import no.nav.familie.ks.sak.kjerne.personopplysninggrunnlag.domene.PersonopplysningGrunnlag | ||
import no.nav.familie.tidslinje.Periode | ||
import no.nav.familie.tidslinje.Tidslinje | ||
import no.nav.familie.tidslinje.tilTidslinje | ||
import no.nav.familie.tidslinje.utvidelser.kombiner | ||
import no.nav.familie.tidslinje.utvidelser.slåSammenLikePerioder | ||
import no.nav.familie.tidslinje.utvidelser.tilPerioderIkkeNull | ||
|
||
object LovverkTidslinjeGenerator { | ||
fun generer( | ||
barnasForskjøvedeVilkårResultater: Map<Aktør, Map<Vilkår, List<Periode<VilkårResultat>>>>, | ||
personopplysningGrunnlag: PersonopplysningGrunnlag, | ||
skalBestemmeLovverkBasertPåFødselsdato: Boolean, | ||
): Tidslinje<Lovverk> = | ||
barnasForskjøvedeVilkårResultater | ||
.map { (aktør, forskjøvedeVilkårResultater) -> | ||
// Konverterer forskjøvede VilkårResultater til Lovverk-tidslinje per barn | ||
forskjøvedeVilkårResultater.tilLovverkTidslinje( | ||
barn = personopplysningGrunnlag.barna.single { it.aktør == aktør }, | ||
skalBestemmeLovverkBasertPåFødselsdato = skalBestemmeLovverkBasertPåFødselsdato, | ||
) | ||
} | ||
// Kombinerer alle Lovverk-tidslinjer til en felles Lovverk-tidslinje. | ||
// Lovverk-tidslinjene kan overlappe, men lovverket i de overlappende periodene må være det samme. | ||
.kombiner { | ||
val lovverkIPeriode = it.toSet() | ||
if (lovverkIPeriode.size > 1) { | ||
throw Feil("Støtter ikke overlappende lovverk") | ||
} | ||
lovverkIPeriode.single() | ||
}.tilPerioderIkkeNull() | ||
.sortedBy { it.fom } | ||
.erstattFørsteFomOgSisteTomMedNull() | ||
.kombinerEtterfølgendeElementer() | ||
// Sørger for at et lovverk strekker seg helt frem til neste startdato for neste lovverk | ||
.map { (lovverkPeriode, nesteLovverkPeriode) -> Periode(verdi = lovverkPeriode.verdi, fom = lovverkPeriode.fom, tom = nesteLovverkPeriode?.fom?.minusDays(1)) } | ||
.tilTidslinje() | ||
|
||
private fun Map<Vilkår, List<Periode<VilkårResultat>>>.tilLovverkTidslinje( | ||
barn: Person, | ||
skalBestemmeLovverkBasertPåFødselsdato: Boolean, | ||
): Tidslinje<Lovverk> = | ||
// Konverterer alle VilkårResultatPerioder per vilkår til Lovverk-tidslinjer og kombinerer disse til en felles tidslinje. | ||
this.values | ||
.map { perioder -> | ||
perioder | ||
.map { periode -> | ||
Periode( | ||
fom = periode.fom, | ||
tom = periode.tom, | ||
verdi = | ||
LovverkUtleder.utledLovverkForBarn( | ||
fødselsdato = barn.fødselsdato, | ||
skalBestemmeLovverkBasertPåFødselsdato = skalBestemmeLovverkBasertPåFødselsdato, | ||
), | ||
) | ||
}.tilTidslinje() | ||
.slåSammenLikePerioder() | ||
}.kombiner { | ||
it.toSet().single() | ||
} | ||
|
||
private fun List<Periode<Lovverk>>.erstattFørsteFomOgSisteTomMedNull(): List<Periode<Lovverk>> = | ||
// Sørger for at lovverk-tidslinje strekker seg fra TIDENES_MORGEN til TIDENES_ENDE. | ||
// Da er vi sikre på at tidslinja dekker søkers vilkår. | ||
this.mapIndexed { index, periode -> | ||
when (index) { | ||
0 -> Periode(verdi = periode.verdi, fom = null, tom = periode.tom) | ||
this.lastIndex -> Periode(verdi = periode.verdi, fom = periode.fom, tom = null) | ||
else -> periode | ||
} | ||
} | ||
|
||
private fun List<Periode<Lovverk>>.kombinerEtterfølgendeElementer(): List<Pair<Periode<Lovverk>, Periode<Lovverk>?>> { | ||
if (this.isEmpty()) return emptyList() | ||
|
||
return this.zipWithNext() + Pair(this.last(), null) | ||
} | ||
} |
Oops, something went wrong.