Skip to content

Commit

Permalink
Feature/ny respons husstandsmedlemmer (#355)
Browse files Browse the repository at this point in the history
* Endret for å fylle ut ny respons husstandsmedlemmer

* Endret for å fylle ut ny respons husstandsmedlemmer

* Endret for å fylle ut ny respons husstandsmedlemmer

* Endret for å fylle ut ny respons husstandsmedlemmer

---------

Co-authored-by: Magnus Rinnan <magnus.rinnan@nav.no>
  • Loading branch information
ugur93 and rinnan17 authored Jul 8, 2024
1 parent 0251052 commit cec94d0
Show file tree
Hide file tree
Showing 5 changed files with 295 additions and 39 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<token-support.version>3.2.0</token-support.version>
<!-- dependencies -->
<bidrag-commons-test.version>1.20230511093912_dc35d81</bidrag-commons-test.version>
<bidrag-felles.version>2024.01.31.145137</bidrag-felles.version>
<bidrag-felles.version>2024.07.01.144736</bidrag-felles.version>
<bidrag-tilgangskontroll.version>1.10.4</bidrag-tilgangskontroll.version>
<mockito-kotlin.version>5.3.1</mockito-kotlin.version>
<springdoc-openapi-ui.version>2.5.0</springdoc-openapi-ui.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.bidrag.grunnlag.service

import no.nav.bidrag.domene.enums.grunnlag.GrunnlagRequestType
import no.nav.bidrag.domene.enums.person.Familierelasjon
import no.nav.bidrag.domene.enums.person.SivilstandskodePDL
import no.nav.bidrag.domene.ident.Personident
import no.nav.bidrag.grunnlag.SECURE_LOGGER
import no.nav.bidrag.grunnlag.bo.PersonBo
Expand All @@ -14,6 +15,8 @@ import no.nav.bidrag.grunnlag.util.GrunnlagUtil.Companion.tilJson
import no.nav.bidrag.transport.behandling.grunnlag.response.BorISammeHusstandDto
import no.nav.bidrag.transport.behandling.grunnlag.response.FeilrapporteringDto
import no.nav.bidrag.transport.behandling.grunnlag.response.RelatertPersonGrunnlagDto
import no.nav.bidrag.transport.person.ForelderBarnRelasjon
import no.nav.bidrag.transport.person.ForelderBarnRelasjonDto
import no.nav.bidrag.transport.person.Husstandsmedlem
import no.nav.bidrag.transport.person.NavnFødselDødDto
import no.nav.bidrag.transport.person.PersonRequest
Expand All @@ -31,8 +34,35 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
val husstandsmedlemmerListe = hentHusstandsmedlemmer(personIdOgPeriode = personIdOgPeriode, feilrapporteringListe = feilrapporteringListe)
SECURE_LOGGER.debug("husstandsmedlemmerListe for {} {}", personIdOgPeriode.personId, husstandsmedlemmerListe)

// Henter alle barn av BM/BP
val barnListe = hentBarn(personident = Personident(personIdOgPeriode.personId), feilrapporteringListe = feilrapporteringListe)
// Henter alle forelderbarnrelasjoner for BM/BP
val forelderBarnRelasjoner =
hentForelderBarnRelasjoner(
personident = Personident(personIdOgPeriode.personId),
feilrapporteringListe = feilrapporteringListe,
).forelderBarnRelasjon

// Henter personid for eventuelle ektefeller
val ektefelleListe = hentEktefelleListe(personIdOgPeriode.personId)

// Filtrerer ut alle barn av BM/BP
val barnListe = finnBarn(forelderBarnRelasjoner, feilrapporteringListe = feilrapporteringListe)

val motpartFellesBarnListe = mutableListOf<Personident>()

barnListe.forEach { barn ->
val relasjoner = hentForelderBarnRelasjoner(Personident(barn.personId!!), feilrapporteringListe).forelderBarnRelasjon
relasjoner.forEach { relasjon ->
if (relasjon.relatertPersonsRolle == Familierelasjon.MOR ||
relasjon.relatertPersonsRolle == Familierelasjon.FAR ||
relasjon.relatertPersonsRolle == Familierelasjon.MEDMOR &&
relasjon.relatertPersonsIdent != null &&
relasjon.relatertPersonsIdent?.verdi != personIdOgPeriode.personId
) {
motpartFellesBarnListe.add(relasjon.relatertPersonsIdent!!)
}
}
}

SECURE_LOGGER.debug("barnListe for {} {}", personIdOgPeriode.personId, barnListe)
SECURE_LOGGER.debug("relatertPersonRequestListe: {}", relatertPersonRequestListe)

Expand All @@ -41,13 +71,30 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
(husstandsmedlemmerListe + barnListe)
.filterNot { it.personId == personIdOgPeriode.personId }
.forEach { person ->
val relasjonEktefelle = if (ektefelleListe.firstOrNull { it.verdi == person.personId } != null) {
Familierelasjon.EKTEFELLE
} else {
null
}

val relasjonMotpartFellesBarn = if (motpartFellesBarnListe.firstOrNull { it.verdi == person.personId } != null) {
Familierelasjon.MOTPART_TIL_FELLES_BARN
} else {
null
}

val forelderBarnRelasjoner =
forelderBarnRelasjoner.firstOrNull { it.relatertPersonsIdent?.verdi == person.personId }?.relatertPersonsRolle

relatertPersonInternListe.add(
RelatertPersonIntern(
partPersonId = personIdOgPeriode.personId,
relatertPersonPersonId = person.personId,
gjelderPersonId = person.personId,
navn = person.navn,
fødselsdato = person.fodselsdato,
erBarnAvBmBp = barnListe.any { it.personId == person.personId },
relasjon = relasjonEktefelle ?: relasjonMotpartFellesBarn ?: forelderBarnRelasjoner ?: Familierelasjon.INGEN,
husstandsmedlemPeriodeFra =
if (husstandsmedlemmerListe.any { it.personId == person.personId }) {
person.husstandsmedlemPeriodeFra
Expand All @@ -74,19 +121,21 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
relatertPersonInternListe
.groupBy { it.partPersonId to it.relatertPersonPersonId }
.values
.forEach { group ->
val borISammeHusstandListe = group
.forEach { relatertePersoner ->
val borISammeHusstandListe = relatertePersoner
.filter { it.husstandsmedlemPeriodeFra != null || it.husstandsmedlemPeriodeTil != null }
.map { BorISammeHusstandDto(periodeFra = it.husstandsmedlemPeriodeFra, periodeTil = it.husstandsmedlemPeriodeTil) }

val firstPerson = group.first()
val firstPerson = relatertePersoner.first()
relatertPersonListe.add(
RelatertPersonGrunnlagDto(
partPersonId = firstPerson.partPersonId,
relatertPersonPersonId = firstPerson.relatertPersonPersonId,
gjelderPersonId = firstPerson.relatertPersonPersonId,
navn = firstPerson.navn,
fødselsdato = firstPerson.fødselsdato,
erBarnAvBmBp = firstPerson.erBarnAvBmBp,
relasjon = firstPerson.relasjon,
borISammeHusstandDtoListe = borISammeHusstandListe,
),
)
Expand Down Expand Up @@ -172,11 +221,12 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
return slåSammenSammenhengendePerioder(husstandsmedlemListe.sortedWith(compareBy({ it.personId }, { it.husstandsmedlemPeriodeFra })))
}

// Henter alle barn av BM/BP
private fun hentBarn(personident: Personident, feilrapporteringListe: MutableList<FeilrapporteringDto>): List<PersonBo> {
val barnListe = mutableListOf<PersonBo>()

// Henter en liste over BMs/BPs barn og henter så info om fødselsdag og navn for disse
// Henter alle forelderbarnrelasjoner
private fun hentForelderBarnRelasjoner(
personident: Personident,
feilrapporteringListe: MutableList<FeilrapporteringDto>,
): ForelderBarnRelasjonDto {
// Henter en liste over forelderbarnrelasjoner
when (
val restResponseForelderBarnRelasjon = bidragPersonConsumer.hentForelderBarnRelasjon(personident)
) {
Expand All @@ -185,26 +235,7 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
SECURE_LOGGER.info(
"Henting av forelder-barn-relasjoner ga følgende respons for ${personident.verdi}: ${tilJson(forelderBarnRelasjonResponse)}",
)

forelderBarnRelasjonResponse.forelderBarnRelasjon.forEach {
// Kaller bidrag-person for å hente info om fødselsdato og navn
if (it.relatertPersonsRolle == Familierelasjon.BARN && it.relatertPersonsIdent != null) {
val navnFoedselDoedResponseDto = hentNavnFoedselDoed(
personident = Personident(it.relatertPersonsIdent!!.verdi),
feilrapporteringListe = feilrapporteringListe,
)
// Lager en liste over fnr for alle barn som er funnet
barnListe.add(
PersonBo(
personId = it.relatertPersonsIdent?.verdi,
navn = navnFoedselDoedResponseDto?.navn,
fodselsdato = navnFoedselDoedResponseDto?.fødselsdato,
husstandsmedlemPeriodeFra = null,
husstandsmedlemPeriodeTil = null,
),
)
}
}
return forelderBarnRelasjonResponse
}

is RestResponse.Failure -> {
Expand All @@ -228,14 +259,42 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
),
),
)
return emptyList()
return ForelderBarnRelasjonDto(emptyList())
}
}
}

// Henter alle forelderbarnrelasjoner
private fun finnBarn(
forelderBarnRelasjonListe: List<ForelderBarnRelasjon>,
feilrapporteringListe: MutableList<FeilrapporteringDto>,
): List<PersonBo> {
val barnListe = mutableListOf<PersonBo>()

forelderBarnRelasjonListe.forEach {
// Kaller bidrag-person for å hente info om fødselsdato og navn
if (it.relatertPersonsRolle == Familierelasjon.BARN && it.relatertPersonsIdent != null) {
val navnFødselDødResponseDto = hentNavnFødselDød(
personident = Personident(it.relatertPersonsIdent!!.verdi),
feilrapporteringListe = feilrapporteringListe,
)
// Lager en liste over fnr for alle barn som er funnet
barnListe.add(
PersonBo(
personId = it.relatertPersonsIdent?.verdi,
navn = navnFødselDødResponseDto?.navn,
fodselsdato = navnFødselDødResponseDto?.fødselsdato,
husstandsmedlemPeriodeFra = null,
husstandsmedlemPeriodeTil = null,
),
)
}
}
return barnListe
}

// Henter navn, fødselsdato og eventuell dødsdato for personer fra bidrag-person
private fun hentNavnFoedselDoed(personident: Personident, feilrapporteringListe: MutableList<FeilrapporteringDto>): NavnFødselDødDto? {
private fun hentNavnFødselDød(personident: Personident, feilrapporteringListe: MutableList<FeilrapporteringDto>): NavnFødselDødDto? {
val navnFødselDødDto: NavnFødselDødDto

when (
Expand Down Expand Up @@ -334,13 +393,42 @@ class HentRelatertePersonerService(private val bidragPersonConsumer: BidragPerso
return false
}

private fun hentEktefelleListe(personId: String): List<Personident> {
val ektefelleListe = mutableListOf<Personident>()
when (
val restResponseSivilstand = bidragPersonConsumer.hentSivilstand(Personident(personId))
) {
is RestResponse.Success -> {
val sivilstandRespons = restResponseSivilstand.body
sivilstandRespons.sivilstandPdlDto.forEach {
if (it.relatertVedSivilstand != null && it.type.toString() == SivilstandskodePDL.GIFT.toString()) {
SECURE_LOGGER.info(
"Henting av ektefelles personident ga følgende respons for $personId: ${tilJson(restResponseSivilstand.body)}",
)
ektefelleListe.add(Personident(it.relatertVedSivilstand!!))
}
}
}

is RestResponse.Failure -> {
SECURE_LOGGER.warn(
"Feil ved henting av ektefelles personident for $personId. Statuskode ${restResponseSivilstand.statusCode.value()}",
)
return emptyList()
}
}
return ektefelleListe
}

// Intern dataklasse brukt for å simulere funksjonalitet fra oppdater- og hent-grunnlagspakke-tjenestene
data class RelatertPersonIntern(
val partPersonId: String?,
val relatertPersonPersonId: String?,
val gjelderPersonId: String? = null,
val navn: String?,
valdselsdato: LocalDate?,
val erBarnAvBmBp: Boolean,
val relasjon: Familierelasjon = Familierelasjon.INGEN,
val husstandsmedlemPeriodeFra: LocalDate?,
val husstandsmedlemPeriodeTil: LocalDate?,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ import no.nav.bidrag.transport.behandling.grunnlag.response.FeilrapporteringDto
import no.nav.bidrag.transport.behandling.grunnlag.response.SivilstandGrunnlagDto
import no.nav.bidrag.transport.person.SivilstandPdlHistorikkDto

class HentSivilstandService(
private val bidragPersonConsumer: BidragPersonConsumer,
) {
class HentSivilstandService(private val bidragPersonConsumer: BidragPersonConsumer) {

fun hentSivilstand(sivilstandRequestListe: List<PersonIdOgPeriodeRequest>): HentGrunnlagGenericDto<SivilstandGrunnlagDto> {
val sivilstandListe = mutableListOf<SivilstandGrunnlagDto>()
Expand Down
99 changes: 98 additions & 1 deletion src/test/kotlin/no/nav/bidrag/grunnlag/TestUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -910,6 +910,26 @@ class TestUtil {
relatertPersonsRolle = Familierelasjon.BARN,
minRolleForPerson = Familierelasjon.FAR,
),
ForelderBarnRelasjon(
relatertPersonsIdent = Personident("999"),
relatertPersonsRolle = Familierelasjon.MOR,
minRolleForPerson = Familierelasjon.BARN,
),
),
)

fun byggHentForelderBarnRelasjonerForBarn() = ForelderBarnRelasjonDto(
immutableListOf(
ForelderBarnRelasjon(
relatertPersonsIdent = Personident("123456"),
relatertPersonsRolle = Familierelasjon.FAR,
minRolleForPerson = Familierelasjon.BARN,
),
ForelderBarnRelasjon(
relatertPersonsIdent = Personident("888"),
relatertPersonsRolle = Familierelasjon.MOR,
minRolleForPerson = Familierelasjon.BARN,
),
),
)

Expand Down Expand Up @@ -1082,7 +1102,7 @@ class TestUtil {
),
)

fun byggHentEttHusstandsmedlem() = HusstandsmedlemmerDto(
fun byggHentToHusstandsmedlemmer() = HusstandsmedlemmerDto(
immutableListOf(
Husstand(
gyldigFraOgMed = LocalDate.parse("2023-09-04"),
Expand Down Expand Up @@ -1115,6 +1135,60 @@ class TestUtil {
),
)

fun byggHentHusstandsmedlemmerSærbidrag() = HusstandsmedlemmerDto(
immutableListOf(
Husstand(
gyldigFraOgMed = LocalDate.parse("2023-09-04"),
gyldigTilOgMed = LocalDate.parse("2023-11-12"),
adressenavn = "adressenavn1",
husnummer = "husnummer1",
husbokstav = "husbokstav1",
bruksenhetsnummer = "bruksenhetsnummer1",
postnummer = "postnr1",
bydelsnummer = "bydelsnummer1",
kommunenummer = "kommunenummer1",
matrikkelId = 12345,
immutableListOf(
Husstandsmedlem(
gyldigFraOgMed = LocalDate.parse("2023-09-04"),
gyldigTilOgMed = LocalDate.parse("2023-11-29"),
personId = Personident("111"),
navn = "fornavn1 mellomnavn1 etternavn1",
fødselsdato = LocalDate.parse("2001-04-17"),
),
Husstandsmedlem(
gyldigFraOgMed = LocalDate.parse("2015-09-04"),
gyldigTilOgMed = LocalDate.parse("2024-11-29"),
personId = Personident("666"),
navn = "fornavn1 mellomnavn1 etternavn1",
fødselsdato = LocalDate.parse("2001-04-17"),
),
Husstandsmedlem(
gyldigFraOgMed = LocalDate.parse("2010-09-04"),
gyldigTilOgMed = null,
personId = Personident("777"),
navn = "Nåværende Ektefelle",
fødselsdato = LocalDate.parse("2000-01-17"),
),
Husstandsmedlem(
gyldigFraOgMed = LocalDate.parse("2012-09-04"),
gyldigTilOgMed = null,
personId = Personident("888"),
navn = "Mor Til Felles Barn",
fødselsdato = LocalDate.parse("2004-04-17"),
),
Husstandsmedlem(
gyldigFraOgMed = LocalDate.parse("2012-09-04"),
gyldigTilOgMed = null,
personId = Personident("999"),
navn = "Mor Til BP",
fødselsdato = LocalDate.parse("1950-04-17"),
),
),
),
),
)

fun byggHentSivilstandResponse() = SivilstandPdlHistorikkDto(
immutableListOf(
SivilstandPdlDto(
Expand Down Expand Up @@ -1272,6 +1346,29 @@ class TestUtil {
),
)

fun byggHentSivilstandMedRelatertVedSivilstand() = SivilstandPdlHistorikkDto(
immutableListOf(
SivilstandPdlDto(
type = SivilstandskodePDL.GIFT,
gyldigFom = LocalDate.parse("2017-03-01"),
relatertVedSivilstand = "777",
bekreftelsesdato = null,
master = "PDL",
registrert = LocalDateTime.parse("2021-01-01T12:00:00"),
historisk = false,
),
SivilstandPdlDto(
type = SivilstandskodePDL.ENKE_ELLER_ENKEMANN,
gyldigFom = null,
relatertVedSivilstand = null,
bekreftelsesdato = LocalDate.parse("2011-02-01"),
master = "PDL",
registrert = LocalDateTime.parse("2011-02-01T12:00:00"),
historisk = true,
),
),
)

fun byggHentPersonidenterResponse() = immutableListOf(
PersonidentDto(
ident = "personident",
Expand Down
Loading

0 comments on commit cec94d0

Please sign in to comment.