From 6b932400143d7fb43a10804cdbc9666b66ed5be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Schr=C3=B8der?= Date: Tue, 3 Dec 2024 14:53:43 +0100 Subject: [PATCH] Hent dato for innflytting fra angittflyttedato --- .../src/main/kotlin/pdl/PdlModell.kt | 2 + .../main/kotlin/pdl/mapper/UtlandMapper.kt | 69 +++++++++++++++++-- .../src/main/resources/pdl/hentPerson.graphql | 1 + .../main/resources/pdl/hentPersonBolk.graphql | 1 + .../kotlin/pdl/mapper/UtlandMapperTest.kt | 22 ++++++ .../src/main/kotlin/person/Person.kt | 2 + 6 files changed, 90 insertions(+), 7 deletions(-) diff --git a/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/PdlModell.kt b/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/PdlModell.kt index bfc9cd80215..b4fd27203d8 100644 --- a/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/PdlModell.kt +++ b/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/PdlModell.kt @@ -236,6 +236,7 @@ data class PdlFoedested( data class PdlFolkeregistermetadata( val gyldighetstidspunkt: LocalDateTime? = null, + val ajourholdstidspunkt: LocalDateTime? = null, val opphoerstidspunkt: LocalDateTime? = null, ) @@ -305,6 +306,7 @@ data class PdlUtflyttingFraNorge( ) data class PdlBostedsadresse( + val angittFlyttedato: LocalDateTime? = null, val coAdressenavn: String?, val gyldigFraOgMed: LocalDateTime? = null, val gyldigTilOgMed: LocalDateTime? = null, diff --git a/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/mapper/UtlandMapper.kt b/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/mapper/UtlandMapper.kt index ab1342972ef..89e8ee868c8 100644 --- a/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/mapper/UtlandMapper.kt +++ b/apps/etterlatte-pdltjenester/src/main/kotlin/pdl/mapper/UtlandMapper.kt @@ -3,15 +3,17 @@ package no.nav.etterlatte.pdl.mapper import no.nav.etterlatte.libs.common.person.InnflyttingTilNorge import no.nav.etterlatte.libs.common.person.UtflyttingFraNorge import no.nav.etterlatte.libs.common.person.Utland +import no.nav.etterlatte.pdl.PdlBostedsadresse import no.nav.etterlatte.pdl.PdlHentPerson import no.nav.etterlatte.pdl.PdlInnflyttingTilNorge import no.nav.etterlatte.pdl.PdlUtflyttingFraNorge +import java.time.LocalDate object UtlandMapper { fun mapUtland(hentPerson: PdlHentPerson): Utland = Utland( utflyttingFraNorge = hentPerson.utflyttingFraNorge?.map { (mapUtflytting(it)) }, - innflyttingTilNorge = hentPerson.innflyttingTilNorge?.map { (mapInnflytting(it)) }, + innflyttingTilNorge = hentPerson.innflyttingTilNorge?.map { (mapInnflytting(it, hentPerson.bostedsadresse)) }, ) private fun mapUtflytting(utflytting: PdlUtflyttingFraNorge): UtflyttingFraNorge = @@ -20,11 +22,64 @@ object UtlandMapper { dato = utflytting.utflyttingsdato, ) - private fun mapInnflytting(innflytting: PdlInnflyttingTilNorge): InnflyttingTilNorge = - InnflyttingTilNorge( - fraflyttingsland = innflytting.fraflyttingsland, - // TODO her må vi heller sjekke mot gyldighetsdato på bostedsadresse - // TODO skal ikke være tostring her - dato = innflytting.folkeregistermetadata?.gyldighetstidspunkt?.toLocalDate(), + private fun mapInnflytting( + innflytting: PdlInnflyttingTilNorge?, + bostedsadresse: List?, + ): InnflyttingTilNorge { + val gyldighetstidspunkt: LocalDate? = innflytting?.folkeregistermetadata?.gyldighetstidspunkt?.toLocalDate() + val ajourholdstidspunkt: LocalDate? = innflytting?.folkeregistermetadata?.ajourholdstidspunkt?.toLocalDate() + + val innvandretDato = + if (gyldighetstidspunkt != null) { + val angittFlyttedato = + bostedsadresse + ?.filter { + it.gyldigFraOgMed != null + }?.find { it.gyldigFraOgMed?.toLocalDate() == gyldighetstidspunkt } + ?.angittFlyttedato + + if (angittFlyttedato != null) { + angittFlyttedato.toLocalDate() + } else { + finnForsteDatoEtterInnflytting(gyldighetstidspunkt, bostedsadresse) + } + } else if (ajourholdstidspunkt != null) { + finnForsteDatoEtterInnflytting(ajourholdstidspunkt, bostedsadresse) + } else { + null + } + + return InnflyttingTilNorge( + fraflyttingsland = innflytting?.fraflyttingsland, + dato = innvandretDato, + gyldighetstidspunkt = gyldighetstidspunkt, + ajourholdstidspunkt = ajourholdstidspunkt, ) + } + + private fun finnForsteDatoEtterInnflytting( + systemoppgitt: LocalDate, + bostedstidspunkt: List?, + ): LocalDate { + if (bostedstidspunkt.isNullOrEmpty()) { + return systemoppgitt + } + + return bostedstidspunkt + .sortedBy { it.angittFlyttedato } + .mapNotNull { hentDatoForBostedadresse(it) } + .firstOrNull { it.isAfter(systemoppgitt) || it.isEqual(systemoppgitt) } ?: systemoppgitt + } + + private fun hentDatoForBostedadresse(bostedstidspunkt: PdlBostedsadresse): LocalDate? { + if (bostedstidspunkt.angittFlyttedato != null) { + return bostedstidspunkt.angittFlyttedato.toLocalDate() + } + + if (bostedstidspunkt.gyldigFraOgMed != null) { + return bostedstidspunkt.gyldigFraOgMed.toLocalDate() + } + + return null + } } diff --git a/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPerson.graphql b/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPerson.graphql index cd4c9b81fc5..160a1b86014 100644 --- a/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPerson.graphql +++ b/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPerson.graphql @@ -172,6 +172,7 @@ query( } } bostedsadresse(historikk: $bostedsadresseHistorikk) @include(if: $bostedsadresse) { + angittFlyttedato coAdressenavn vegadresse {...vegadresseDetails} utenlandskAdresse {...utenlandskAdresseDetails} diff --git a/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPersonBolk.graphql b/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPersonBolk.graphql index d4a7642ab22..830e55b64ca 100644 --- a/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPersonBolk.graphql +++ b/apps/etterlatte-pdltjenester/src/main/resources/pdl/hentPersonBolk.graphql @@ -156,6 +156,7 @@ query( } } bostedsadresse(historikk: $bostedsadresseHistorikk) @include(if: $bostedsadresse) { + angittFlyttedato coAdressenavn vegadresse {...vegadresseDetails} utenlandskAdresse {...utenlandskAdresseDetails} diff --git a/apps/etterlatte-pdltjenester/src/test/kotlin/pdl/mapper/UtlandMapperTest.kt b/apps/etterlatte-pdltjenester/src/test/kotlin/pdl/mapper/UtlandMapperTest.kt index 3167d09babd..80d22a6fdae 100644 --- a/apps/etterlatte-pdltjenester/src/test/kotlin/pdl/mapper/UtlandMapperTest.kt +++ b/apps/etterlatte-pdltjenester/src/test/kotlin/pdl/mapper/UtlandMapperTest.kt @@ -46,10 +46,18 @@ internal class UtlandMapperTest { every { folkeregistermetadata } returns mockk { every { gyldighetstidspunkt } returns LocalDateTime.parse("2021-07-01T00:00:00") + every { ajourholdstidspunkt } returns LocalDateTime.parse("2021-07-01T00:00:00") } }, ) every { utflyttingFraNorge } returns null + every { bostedsadresse } returns + listOf( + mockk { + every { angittFlyttedato } returns LocalDateTime.parse("2021-07-01T00:00:00") + every { gyldigFraOgMed } returns LocalDateTime.parse("2021-07-01T00:00:00") + }, + ) } val utland = UtlandMapper.mapUtland(hentPerson) @@ -62,5 +70,19 @@ internal class UtlandMapperTest { ?.dato .toString(), ) + assertEquals( + "2021-07-01", + utland.innflyttingTilNorge + ?.first() + ?.gyldighetstidspunkt + .toString(), + ) + assertEquals( + "2021-07-01", + utland.innflyttingTilNorge + ?.first() + ?.ajourholdstidspunkt + .toString(), + ) } } diff --git a/libs/saksbehandling-common/src/main/kotlin/person/Person.kt b/libs/saksbehandling-common/src/main/kotlin/person/Person.kt index 14665cdf426..56ec14b5d65 100644 --- a/libs/saksbehandling-common/src/main/kotlin/person/Person.kt +++ b/libs/saksbehandling-common/src/main/kotlin/person/Person.kt @@ -114,6 +114,8 @@ data class Utland( data class InnflyttingTilNorge( val fraflyttingsland: String?, val dato: LocalDate?, + val gyldighetstidspunkt: LocalDate?, + val ajourholdstidspunkt: LocalDate?, ) data class UtflyttingFraNorge(