Skip to content

Commit

Permalink
Hent dato for innflytting fra angittflyttedato
Browse files Browse the repository at this point in the history
  • Loading branch information
emilps committed Dec 3, 2024
1 parent 4ad9732 commit 6b93240
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 7 deletions.
2 changes: 2 additions & 0 deletions apps/etterlatte-pdltjenester/src/main/kotlin/pdl/PdlModell.kt
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ data class PdlFoedested(

data class PdlFolkeregistermetadata(
val gyldighetstidspunkt: LocalDateTime? = null,
val ajourholdstidspunkt: LocalDateTime? = null,
val opphoerstidspunkt: LocalDateTime? = null,
)

Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -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<PdlBostedsadresse>?,
): 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<PdlBostedsadresse>?,
): 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
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ query(
}
}
bostedsadresse(historikk: $bostedsadresseHistorikk) @include(if: $bostedsadresse) {
angittFlyttedato
coAdressenavn
vegadresse {...vegadresseDetails}
utenlandskAdresse {...utenlandskAdresseDetails}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ query(
}
}
bostedsadresse(historikk: $bostedsadresseHistorikk) @include(if: $bostedsadresse) {
angittFlyttedato
coAdressenavn
vegadresse {...vegadresseDetails}
utenlandskAdresse {...utenlandskAdresseDetails}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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(),
)
}
}
2 changes: 2 additions & 0 deletions libs/saksbehandling-common/src/main/kotlin/person/Person.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit 6b93240

Please sign in to comment.