Skip to content

Commit

Permalink
Forbedringer: FORSLAG - henter kun barnOgSøker på en behandling i ste…
Browse files Browse the repository at this point in the history
…det for hele Persongrunnlaget (#3677)

## FORSLAG

Notere at dette er et forslag, og er åpen for diskusjon eller å lukke
PR'en hvis dere synes det blir for dumt :)

### 💰 Hva skal gjøres, og hvorfor?
I mange tilfeller er det kun nødvendig å hente en forenklet versjon av
PersonPåBehandling, i stedet for å hente hele persongrunnlaget, som
henter Person, som henter veldig mye annet. (Behandling, fagsak,
PersonopplysningGrunnlag, Bostedsadresser, opphold og allt annet fra
Person)

---------

Co-authored-by: halvormundal <halvorbmundal@gmail.com>
Co-authored-by: halvorbmundal <halvorbmundal@users.noreply.github.com>
  • Loading branch information
3 people authored Aug 7, 2023
1 parent 6fb47df commit 812ae93
Show file tree
Hide file tree
Showing 32 changed files with 305 additions and 165 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåB
import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.domene.ArbeidsfordelingPåBehandlingRepository
import no.nav.familie.ba.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlagRepository
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.logg.LoggService
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService
Expand Down Expand Up @@ -174,23 +175,19 @@ class ArbeidsfordelingService(
}

fun hentArbeidsfordelingsenhet(behandling: Behandling): Arbeidsfordelingsenhet {
val søker = identMedAdressebeskyttelse(behandling.fagsak.aktør)

val personinfoliste = when (
val personopplysningGrunnlag =
personopplysningGrunnlagRepository.findByBehandlingAndAktiv(behandling.id)
) {
null -> listOf(søker)
else -> personopplysningGrunnlag.barna.mapNotNull { barn ->
val søker: IdentMedAdressebeskyttelse = identMedAdressebeskyttelse(behandling.fagsak.aktør)

val personinfoliste: List<IdentMedAdressebeskyttelse> = personopplysningGrunnlagRepository.finnSøkerOgBarnAktørerTilAktiv(behandling.id)
.barn()
.mapNotNull {
try {
identMedAdressebeskyttelse(barn.aktør)
identMedAdressebeskyttelse(it.aktør)
} catch (e: PdlPersonKanIkkeBehandlesIFagsystem) {
logger.warn("Ignorerer barn fra hentArbeidsfordelingsenhet for behandling ${behandling.id} : ${e.årsak}")
secureLogger.warn("Ignorerer barn ${barn.aktør.aktivFødselsnummer()} hentArbeidsfordelingsenhet for behandling ${behandling.id}: ${e.årsak}")
secureLogger.warn("Ignorerer barn ${it.aktør.aktivFødselsnummer()} hentArbeidsfordelingsenhet for behandling ${behandling.id}: ${e.årsak}")
null
}
}.plus(søker)
}

val identMedStrengeste = finnPersonMedStrengesteAdressebeskyttelse(personinfoliste)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Medlemskap
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.statsborgerskap.StatsborgerskapService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.søker
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService
import no.nav.familie.ba.sak.kjerne.steg.StegService
Expand Down Expand Up @@ -243,8 +244,8 @@ class AutovedtakFødselshendelseService(
private fun hentBegrunnelseFraVilkårsvurdering(behandlingId: Long): String {
val vilkårsvurdering = vilkårsvurderingRepository.findByBehandlingAndAktiv(behandlingId)
val behandling = behandlingHentOgPersisterService.hent(behandlingId)
val søker = persongrunnlagService.hentSøker(behandling.id)
val søkerResultat = vilkårsvurdering?.personResultater?.find { it.aktør == søker?.aktør }
val søker = persongrunnlagService.hentSøkerOgBarnPåBehandlingThrows(behandling.id).søker()
val søkerResultat = vilkårsvurdering?.personResultater?.find { it.aktør == søker.aktør }

val bosattIRiketResultat = søkerResultat?.vilkårResultater?.find { it.vilkårType == Vilkår.BOSATT_I_RIKET }
val lovligOppholdResultat = søkerResultat?.vilkårResultater?.find { it.vilkårType == Vilkår.LOVLIG_OPPHOLD }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class UtvidetBehandlingService(
fødselshendelsefiltreringResultater = fødselshendelsefiltreringResultatRepository.finnFødselshendelsefiltreringResultater(
behandlingId = behandling.id,
).map { it.tilRestFødselshendelsefiltreringResultat() },
utbetalingsperioder = vedtaksperiodeService.hentUtbetalingsperioder(behandling),
utbetalingsperioder = vedtaksperiodeService.hentUtbetalingsperioder(behandling, personopplysningGrunnlag),
personerMedAndelerTilkjentYtelse = personopplysningGrunnlag?.tilRestPersonerMedAndeler(andelerTilkjentYtelse)
?: emptyList(),
endretUtbetalingAndeler = endreteUtbetalingerMedAndeler
Expand All @@ -152,7 +152,11 @@ class UtvidetBehandlingService(
endringstidspunkt = utledEndringstidpunkt(endringstidspunkt, behandling),
vedtak = vedtak?.tilRestVedtak(
vedtaksperioderMedBegrunnelser = if (behandling.status != BehandlingStatus.AVSLUTTET) {
vedtaksperiodeService.hentUtvidetVedtaksperiodeMedBegrunnelser(vedtak = vedtak)
vedtaksperiodeService.hentUtvidetVedtaksperiodeMedBegrunnelser(
vedtak = vedtak,
personopplysningGrunnlag = personopplysningGrunnlag
?: error("Mangler persongrunnlag på behandling=$behandlingId"),
)
.sorter()
.map { it.tilRestUtvidetVedtaksperiodeMedBegrunnelser() }
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.Årsak
import no.nav.familie.ba.sak.kjerne.endretutbetaling.validerAtDetFinnesDeltBostedEndringerMedSammeProsentForUtvidedeEndringer
import no.nav.familie.ba.sak.kjerne.endretutbetaling.validerBarnasVilkår
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.simulering.SimuleringService
import no.nav.familie.ba.sak.kjerne.steg.BehandlingSteg
import no.nav.familie.ba.sak.kjerne.steg.EndringerIUtbetalingForBehandlingSteg.ENDRING_I_UTBETALING
Expand Down Expand Up @@ -54,23 +55,22 @@ class BehandlingsresultatSteg(
override fun preValiderSteg(behandling: Behandling, stegService: StegService?) {
if (!behandling.erSatsendring() && behandling.skalBehandlesAutomatisk) return

val søkerOgBarn = persongrunnlagService.hentSøkerOgBarnPåBehandlingThrows(behandling.id)
if (behandling.type != BehandlingType.TEKNISK_ENDRING && behandling.type != BehandlingType.MIGRERING_FRA_INFOTRYGD_OPPHØRT) {
val vilkårsvurdering = vilkårService.hentVilkårsvurderingThrows(behandlingId = behandling.id)
val barna = persongrunnlagService.hentBarna(behandling)

validerBarnasVilkår(barna, vilkårsvurdering)
validerBarnasVilkår(søkerOgBarn.barn(), vilkårsvurdering)
}

val tilkjentYtelse = beregningService.hentTilkjentYtelseForBehandling(behandlingId = behandling.id)
val personopplysningGrunnlag = persongrunnlagService.hentAktivThrows(behandlingId = behandling.id)

if (behandling.erSatsendring()) {
validerSatsendring(tilkjentYtelse)
}

validerAtTilkjentYtelseHarFornuftigePerioderOgBeløp(
tilkjentYtelse = tilkjentYtelse,
personopplysningGrunnlag = personopplysningGrunnlag,
søkerOgBarn = søkerOgBarn,
)

val endreteUtbetalingerMedAndeler = andelerTilkjentYtelseOgEndreteUtbetalingerService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService
import no.nav.familie.ba.sak.kjerne.forrigebehandling.EndringIUtbetalingUtil
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlag
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlagRepository
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.steg.EndringerIUtbetalingForBehandlingSteg
import no.nav.familie.ba.sak.kjerne.tidslinje.Tidslinje
Expand Down Expand Up @@ -127,10 +128,9 @@ class BeregningService(
hentTilkjentYtelseForBehandling(behandlingId = it.id)
}.filter {
personopplysningGrunnlagRepository
.findByBehandlingAndAktiv(behandlingId = it.behandling.id)
?.barna?.map { barn -> barn.aktør }
?.contains(barnAktør)
?: false
.finnSøkerOgBarnAktørerTilAktiv(behandlingId = it.behandling.id)
.barn().map { barn -> barn.aktør }
.contains(barnAktør)
}.map { it }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import no.nav.familie.ba.sak.kjerne.beregning.domene.tilTidslinjerPerPersonOgTyp
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.forrigebehandling.EndringIUtbetalingUtil
import no.nav.familie.ba.sak.kjerne.forrigebehandling.EndringUtil.tilFørsteEndringstidspunkt
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonEnkel
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlag
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.søker
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.outerJoin
import no.nav.familie.ba.sak.kjerne.vedtak.begrunnelser.tilBrevTekst
Expand All @@ -32,10 +33,10 @@ fun hentGyldigEtterbetalingFom(kravDato: LocalDateTime) =

fun hentSøkersAndeler(
andeler: List<AndelTilkjentYtelse>,
ker: Person,
ker: PersonEnkel,
) = andeler.filter { it.aktør == søker.aktør }

fun hentBarnasAndeler(andeler: List<AndelTilkjentYtelse>, barna: List<Person>) = barna.map { barn ->
fun hentBarnasAndeler(andeler: List<AndelTilkjentYtelse>, barna: List<PersonEnkel>) = barna.map { barn ->
barn to andeler.filter { it.aktør == barn.aktør }
}

Expand Down Expand Up @@ -128,10 +129,10 @@ object TilkjentYtelseValidering {

fun validerAtTilkjentYtelseHarFornuftigePerioderOgBeløp(
tilkjentYtelse: TilkjentYtelse,
personopplysningGrunnlag: PersonopplysningGrunnlag,
kerOgBarn: List<PersonEnkel>,
) {
val søker = personopplysningGrunnlag.søker
val barna = personopplysningGrunnlag.barna
val søker = søkerOgBarn.søker()
val barna = søkerOgBarn.barn()

val tidslinjeMedAndeler = tilkjentYtelse.tilTidslinjeMedAndeler()

Expand All @@ -143,22 +144,22 @@ object TilkjentYtelseValidering {

validerAtBeløpForPartStemmerMedSatser(person = søker, andeler = søkersAndeler, fagsakType = fagsakType)

barnasAndeler.forEach { (person, andeler) ->
validerAtBeløpForPartStemmerMedSatser(person = person, andeler = andeler, fagsakType = fagsakType)
barnasAndeler.forEach { (barn, andeler) ->
validerAtBeløpForPartStemmerMedSatser(person = barn, andeler = andeler, fagsakType = fagsakType)
}
}
}

fun validerAtBarnIkkeFårFlereUtbetalingerSammePeriode(
behandlendeBehandlingTilkjentYtelse: TilkjentYtelse,
barnMedAndreRelevanteTilkjentYtelser: List<Pair<Person, List<TilkjentYtelse>>>,
personopplysningGrunnlag: PersonopplysningGrunnlag,
barnMedAndreRelevanteTilkjentYtelser: List<Pair<PersonEnkel, List<TilkjentYtelse>>>,
kerOgBarn: List<PersonEnkel>,
) {
val barna = personopplysningGrunnlag.barna.sortedBy { it.fødselsdato }
val barna = søkerOgBarn.barn().sortedBy { it.fødselsdato }

val barnasAndeler = hentBarnasAndeler(behandlendeBehandlingTilkjentYtelse.andelerTilkjentYtelse.toList(), barna)

val barnMedUtbetalingsikkerhetFeil = mutableListOf<Person>()
val barnMedUtbetalingsikkerhetFeil = mutableListOf<PersonEnkel>()
barnasAndeler.forEach { (barn, andeler) ->
val barnsAndelerFraAndreBehandlinger =
barnMedAndreRelevanteTilkjentYtelser.filter { it.first.aktør == barn.aktør }
Expand Down Expand Up @@ -221,7 +222,7 @@ object TilkjentYtelseValidering {
}

private fun validerAtBeløpForPartStemmerMedSatser(
person: Person,
person: PersonEnkel,
andeler: List<AndelTilkjentYtelse>,
fagsakType: FagsakType,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.familie.ba.sak.kjerne.beregning.TilkjentYtelseValidering.finnAktø
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelse
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.totrinnskontroll.TotrinnskontrollService
import org.slf4j.LoggerFactory
Expand All @@ -31,9 +32,9 @@ class TilkjentYtelseValideringService(
fun validerAtBarnIkkeFårFlereUtbetalingerSammePeriode(behandling: Behandling) {
val tilkjentYtelse = beregningService.hentTilkjentYtelseForBehandling(behandlingId = behandling.id)

val personopplysningGrunnlag = persongrunnlagService.hentAktivThrows(behandlingId = behandling.id)
val søkerOgBarn = persongrunnlagService.hentSøkerOgBarnPåBehandlingThrows(behandlingId = behandling.id)

val barnMedAndreRelevanteTilkjentYtelser = personopplysningGrunnlag.barna.map {
val barnMedAndreRelevanteTilkjentYtelser = søkerOgBarn.barn().map {
Pair(
it,
beregningService.hentRelevanteTilkjentYtelserForBarn(it.aktør, behandling.fagsak.id),
Expand All @@ -50,7 +51,7 @@ class TilkjentYtelseValideringService(
TilkjentYtelseValidering.validerAtBarnIkkeFårFlereUtbetalingerSammePeriode(
behandlendeBehandlingTilkjentYtelse = tilkjentYtelse,
barnMedAndreRelevanteTilkjentYtelser = barnMedAndreRelevanteTilkjentYtelser,
personopplysningGrunnlag = personopplysningGrunnlag,
søkerOgBarn = søkerOgBarn,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import no.nav.familie.ba.sak.kjerne.beregning.hentGyldigEtterbetalingFom
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.EndretUtbetalingAndel
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.Årsak
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonEnkel
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.UtdypendeVilkårsvurdering
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkår
Expand Down Expand Up @@ -312,7 +313,7 @@ fun finnDeltBostedPerioder(
)
}

fun validerBarnasVilkår(barna: List<Person>, vilkårsvurdering: Vilkårsvurdering) {
fun validerBarnasVilkår(barna: List<PersonEnkel>, vilkårsvurdering: Vilkårsvurdering) {
val listeAvFeil = mutableListOf<String>()

barna.map { barn ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
package no.nav.familie.ba.sak.kjerne.eøs.vilkårsvurdering

import no.nav.familie.ba.sak.kjerne.eøs.felles.BehandlingId
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlagRepository
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.VilkårsvurderingRepository
import org.springframework.stereotype.Service

@Service
class VilkårsvurderingTidslinjeService(
private val vilkårsvurderingRepository: VilkårsvurderingRepository,
private val personopplysningGrunnlagRepository: PersonopplysningGrunnlagRepository,
private val persongrunnlagService: PersongrunnlagService,
) {

fun hentTidslinjerThrows(behandlingId: BehandlingId): VilkårsvurderingTidslinjer {
val vilkårsvurdering = vilkårsvurderingRepository.findByBehandlingAndAktiv(behandlingId = behandlingId.id)!!
val personopplysningGrunnlag =
personopplysningGrunnlagRepository.findByBehandlingAndAktiv(behandlingId = behandlingId.id)!!
val søkerOgBarn = persongrunnlagService.hentSøkerOgBarnPåBehandlingThrows(behandlingId = behandlingId.id)

return VilkårsvurderingTidslinjer(
vilkårsvurdering = vilkårsvurdering,
personopplysningGrunnlag,
søkerOgBarn = søkerOgBarn,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import no.nav.familie.ba.sak.common.erUnder18ÅrVilkårTidslinje
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingUnderkategori
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Person
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonEnkel
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonType
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersonopplysningGrunnlag
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.barn
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.søker
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.tidslinje.Tidslinje
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.TomTidslinje
Expand All @@ -19,12 +21,12 @@ import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkårsvurdering

class VilkårsvurderingTidslinjer(
vilkårsvurdering: Vilkårsvurdering,
personopplysningGrunnlag: PersonopplysningGrunnlag,
kerOgBarn: List<PersonEnkel>,
) {
private val barna: List<Aktør> = personopplysningGrunnlag.barna.map { it.aktør }
private val søker: Aktør = personopplysningGrunnlag.søker.aktør
private val barna: List<PersonEnkel> = søkerOgBarn.barn()
private val søker: Aktør = søkerOgBarn.søker().aktør

internal val barnOgFødselsdatoer = personopplysningGrunnlag.barna.associate { it.aktør to it.fødselsdato }
internal val barnOgFødselsdatoer = barna.associate { it.aktør to it.fødselsdato }

private val aktørTilPersonResultater =
vilkårsvurdering.personResultater.associateBy { it.aktør }
Expand All @@ -36,19 +38,24 @@ class VilkårsvurderingTidslinjer(
}

private val søkersTidslinje: SøkersTidslinjer =
SøkersTidslinjer(tidslinjer = this, aktør = søker, fagsakType = vilkårsvurdering.behandling.fagsak.type, behandlingUnderkategori = vilkårsvurdering.behandling.underkategori)
SøkersTidslinjer(
tidslinjer = this,
aktør = søker,
fagsakType = vilkårsvurdering.behandling.fagsak.type,
behandlingUnderkategori = vilkårsvurdering.behandling.underkategori,
)

fun søkersTidslinjer(): SøkersTidslinjer = søkersTidslinje

private val barnasTidslinjer: Map<Aktør, BarnetsTidslinjer> =
barna.associateWith {
BarnetsTidslinjer(
barna.map {
it.aktør to BarnetsTidslinjer(
tidslinjer = this,
aktør = it,
aktør = it.aktør,
fagsakType = vilkårsvurdering.behandling.fagsak.type,
behandlingUnderkategori = vilkårsvurdering.behandling.underkategori,
)
}
}.toMap()

fun forBarn(barn: Person) = barnasTidslinjer[barn.aktør]!!

Expand Down
Loading

0 comments on commit 812ae93

Please sign in to comment.