Skip to content

Commit

Permalink
Update person with gyldig fnr from pdl before processing
Browse files Browse the repository at this point in the history
  • Loading branch information
jacob-meidell committed Nov 22, 2023
1 parent 4bc23be commit 14afe72
Show file tree
Hide file tree
Showing 14 changed files with 332 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ data class Familierelasjon(
) : this(
when (ident == Ident.IDENT_UKJENT) {
true -> Ident.Ukjent
false -> Ident.FolkeregisterIdent(ident)
false -> Ident.FolkeregisterIdent.Gjeldende(ident)
},
relasjon
)
Expand Down Expand Up @@ -83,9 +83,16 @@ sealed class Foreldre {
sealed class Ident {
abstract val ident: String

data class FolkeregisterIdent(
override val ident: String
) : Ident()
sealed class FolkeregisterIdent : Ident() {

data class Gjeldende(
override val ident: String
) : FolkeregisterIdent()

data class Historisk(
override val ident: String
) : FolkeregisterIdent()
}

data object Ukjent : Ident() {
override val ident: String = IDENT_UKJENT
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model

import java.lang.RuntimeException
import java.time.LocalDate
import java.time.Month

class Person(
val fnr: String,
valdselsdato: LocalDate,
valdsdato: LocalDate?,
val familierelasjoner: Familierelasjoner
val familierelasjoner: Familierelasjoner,
val identhistorikk: IdentHistorikk,
) {
override fun equals(other: Any?) = this === other || (other is Person && this.fnr == other.fnr)
val fnr = identhistorikk.gjeldende().ident

override fun equals(other: Any?) = this === other || (other is Person && identifisertAv(other.fnr))
override fun hashCode() = fnr.hashCode()

fun alderVedUtløpAv(aarstall: Int): Int {
Expand Down Expand Up @@ -39,5 +42,28 @@ class Person(
fun finnForeldre(): Foreldre {
return familierelasjoner.finnForeldre()
}

fun identifisertAv(fnr: String): Boolean {
return identhistorikk.identifiseresAv(fnr)
}
}


class IdentHistorikk(
private val identer: Set<Ident.FolkeregisterIdent>
) {
fun gjeldende(): Ident.FolkeregisterIdent {
return identer.singleOrNull { it is Ident.FolkeregisterIdent.Gjeldende }
?: throw IdentHistorikkManglerGjeldendeException()
}

fun historikk(): Set<Ident.FolkeregisterIdent> {
return identer
}

fun identifiseresAv(ident: String): Boolean {
return identer.map { it.ident }.contains(ident)
}

class IdentHistorikkManglerGjeldendeException(msg: String = "Fant ingen gjeldende identer i identhistorikk") : RuntimeException(msg)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo
import com.fasterxml.jackson.annotation.JsonTypeName
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Familierelasjon
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Familierelasjoner
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.IdentHistorikk
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Person
import java.time.LocalDate

Expand All @@ -14,27 +16,27 @@ import java.time.LocalDate
)
@JsonTypeName("PersonDb")
internal data class PersonDb(
val fnr: String,
valdselsdato: String,
valdsdato: String?,
val familierelasjoner: Map<String, String>
val familierelasjoner: Map<String, String>,
val identhistorikk: List<IdentDb>,
)

internal fun Person.toDb(): PersonDb {
return PersonDb(
fnr = fnr,
fødselsdato = fødselsdato.toString(),
dødsdato = dødsdato?.toString(),
familierelasjoner = familierelasjoner.toDb()
familierelasjoner = familierelasjoner.toDb(),
identhistorikk = identhistorikk.toDb(),
)
}

internal fun PersonDb.toDomain(): Person {
return Person(
fnr = fnr,
fødselsdato = LocalDate.parse(fødselsdato),
dødsdato = dødsdato?.let { LocalDate.parse(it) },
familierelasjoner = familierelasjoner.toDomain()
familierelasjoner = familierelasjoner.toDomain(),
identhistorikk = identhistorikk.toDomain()
)
}

Expand All @@ -45,3 +47,48 @@ internal fun Familierelasjoner.toDb(): Map<String, String> {
internal fun Map<String, String>.toDomain(): Familierelasjoner {
return Familierelasjoner(map { Familierelasjon(it.key, Familierelasjon.Relasjon.valueOf(it.value)) })
}

internal fun List<IdentDb>.toDomain(): IdentHistorikk {
return IdentHistorikk(map { it.toDomain() }.filterIsInstance<Ident.FolkeregisterIdent>().toSet())
}

internal fun IdentDb.toDomain(): Ident {
return when {
ident != Ident.IDENT_UKJENT && gjeldende -> {
Ident.FolkeregisterIdent.Gjeldende(ident)
}

ident != Ident.IDENT_UKJENT && !gjeldende -> {
Ident.FolkeregisterIdent.Historisk(ident)
}

else -> {
Ident.Ukjent
}
}
}

internal fun IdentHistorikk.toDb(): List<IdentDb> {
return historikk().map { it.toDb() }
}

internal fun Ident.toDb(): IdentDb {
return when (this) {
is Ident.FolkeregisterIdent.Gjeldende -> {
IdentDb(ident = ident, gjeldende = true)
}

is Ident.FolkeregisterIdent.Historisk -> {
IdentDb(ident = ident, gjeldende = false)
}

Ident.Ukjent -> {
IdentDb(ident = Ident.IDENT_UKJENT, gjeldende = false)
}
}
}

internal data class IdentDb(
val ident: String,
val gjeldende: Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Familierelasjon
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Familierelasjoner
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.IdentHistorikk
import no.nav.pensjon.opptjening.omsorgsopptjening.bestem.pensjonsopptjening.omsorgsopptjening.model.Person
import java.time.LocalDate
import java.time.LocalDateTime
Expand All @@ -27,11 +28,8 @@ internal data class HentPersonQueryResponse(
val doedsfall: List<Doedsfall?>,
val forelderBarnRelasjon: List<ForelderBarnRelasjon>,
) {
private fun gjeldendeIdent(): PdlFnr {
return folkeregisteridentifikator
.firstOrNull { it.status == Folkeregisteridentifikator.Status.I_BRUK }
?.let { PdlFnr(it.identifikasjonsnummer, gjeldende = true) }
?: throw PdlMottatDataException("Fnr i bruk finnes ikke")
private fun identhistorikk(): IdentHistorikk {
return folkeregisteridentifikator.identhistorikk()
}

private fun bestemDoedsdato(doedsfall: List<Doedsfall?>): LocalDate? {
Expand All @@ -58,7 +56,7 @@ internal data class HentPersonQueryResponse(
private fun familierelasjoner(): Familierelasjoner {
return forelderBarnRelasjon.map { relasjon ->
Familierelasjon(
ident = relasjon.relatertPersonsIdent?.let { Ident.FolkeregisterIdent(it) } ?: Ident.Ukjent,
ident = relasjon.relatertPersonsIdent?.let { Ident.FolkeregisterIdent.Gjeldende(it) } ?: Ident.Ukjent,
relasjon = when (relasjon.relatertPersonsRolle) {
ForelderBarnRelasjon.Rolle.BARN -> Familierelasjon.Relasjon.BARN
ForelderBarnRelasjon.Rolle.FAR -> Familierelasjon.Relasjon.FAR
Expand All @@ -71,12 +69,28 @@ internal data class HentPersonQueryResponse(
}
}

private fun List<Folkeregisteridentifikator>.identhistorikk(): IdentHistorikk {
return IdentHistorikk(
map {
when (it.status) {
Folkeregisteridentifikator.Status.I_BRUK -> {
Ident.FolkeregisterIdent.Gjeldende(it.identifikasjonsnummer)
}

Folkeregisteridentifikator.Status.OPPHOERT -> {
Ident.FolkeregisterIdent.Historisk(it.identifikasjonsnummer)
}
}
}.toSet()
)
}

fun toDomain(): Person {
return Person(
fnr = gjeldendeIdent().fnr,
fødselsdato = foedselsdato(),
dødsdato = bestemDoedsdato(doedsfall),
familierelasjoner = familierelasjoner(),
identhistorikk = identhistorikk(),
)
}
}
Expand All @@ -89,6 +103,10 @@ internal data class Folkeregisteridentifikator(
val metadata: Metadata,
val folkeregistermetadata: Folkeregistermetadata? = null,
) {
fun erGjeldende(): Boolean {
return status == Status.I_BRUK
}

enum class Status { I_BRUK, OPPHOERT }
enum class Type { FNR, DNR }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import org.springframework.transaction.support.TransactionTemplate
import java.lang.RuntimeException
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.messages.domene.PersongrunnlagMelding as PersongrunnlagMeldingKafka

@Service
Expand Down Expand Up @@ -108,7 +109,7 @@ class PersongrunnlagMeldingService(

private fun PersongrunnlagMeldingKafka.berikDatagrunnlag(persondata: Set<Person>): BeriketDatagrunnlag {
fun Set<Person>.finnPerson(fnr: String): Person {
return single { it.fnr == fnr }
return singleOrNull { it.identifisertAv(fnr) } ?: throw PersonIkkeIdentifisertAvIdentException()
}

return BeriketDatagrunnlag(
Expand Down Expand Up @@ -143,5 +144,8 @@ class PersongrunnlagMeldingService(
correlationId = correlationId
)
}

class PersonIkkeIdentifisertAvIdentException(msg: String = "Person kunne ikke identifiseres av oppgitt ident") :
RuntimeException(msg)
}

Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@ class EllerTest {
private val fodselAvslag = LocalDate.of(omsorgsår - 10, Month.JANUARY, 1)
private val fodselInnvilget = LocalDate.of(omsorgsår - 20, Month.JANUARY, 1)
private val personAvslag = Person(
fnr = "1",
fødselsdato = fodselAvslag,
dødsdato = null,
familierelasjoner = Familierelasjoner(emptyList())
familierelasjoner = Familierelasjoner(emptyList()),
identhistorikk = IdentHistorikk(setOf(Ident.FolkeregisterIdent.Gjeldende("1")))
)
private val personInnvilget = Person(
fnr = "1",
fødselsdato = fodselInnvilget,
dødsdato = null,
familierelasjoner = Familierelasjoner(emptyList())
familierelasjoner = Familierelasjoner(emptyList()),
identhistorikk = IdentHistorikk(setOf(Ident.FolkeregisterIdent.Gjeldende("1")))
)

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ class FamilierelasjonerTest {
Familierelasjoner(
relasjoner = listOf(
Familierelasjon(
ident = Ident.FolkeregisterIdent("far"),
ident = Ident.FolkeregisterIdent.Gjeldende("far"),
relasjon = Familierelasjon.Relasjon.FAR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("mor"),
ident = Ident.FolkeregisterIdent.Gjeldende("mor"),
relasjon = Familierelasjon.Relasjon.MOR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("barn"),
ident = Ident.FolkeregisterIdent.Gjeldende("barn"),
relasjon = Familierelasjon.Relasjon.BARN
),
)
Expand All @@ -30,8 +30,8 @@ class FamilierelasjonerTest {
assertThat(it.erForelder("ikkemor")).isFalse()
assertThat(it.finnForeldre()).isEqualTo(
Foreldre.Identifisert(
farEllerMedmor = Ident.FolkeregisterIdent(ident = "far"),
mor = Ident.FolkeregisterIdent(ident = "mor")
farEllerMedmor = Ident.FolkeregisterIdent.Gjeldende(ident = "far"),
mor = Ident.FolkeregisterIdent.Gjeldende(ident = "mor")
)
)
}
Expand All @@ -42,15 +42,15 @@ class FamilierelasjonerTest {
Familierelasjoner(
relasjoner = listOf(
Familierelasjon(
ident = Ident.FolkeregisterIdent("medmor"),
ident = Ident.FolkeregisterIdent.Gjeldende("medmor"),
relasjon = Familierelasjon.Relasjon.MEDMOR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("mor"),
ident = Ident.FolkeregisterIdent.Gjeldende("mor"),
relasjon = Familierelasjon.Relasjon.MOR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("barn"),
ident = Ident.FolkeregisterIdent.Gjeldende("barn"),
relasjon = Familierelasjon.Relasjon.BARN
),
)
Expand All @@ -63,8 +63,8 @@ class FamilierelasjonerTest {
assertThat(it.erForelder("ikkemor")).isFalse()
assertThat(it.finnForeldre()).isEqualTo(
Foreldre.Identifisert(
farEllerMedmor = Ident.FolkeregisterIdent(ident = "medmor"),
mor = Ident.FolkeregisterIdent(ident = "mor")
farEllerMedmor = Ident.FolkeregisterIdent.Gjeldende(ident = "medmor"),
mor = Ident.FolkeregisterIdent.Gjeldende(ident = "mor")
)
)
}
Expand All @@ -79,11 +79,11 @@ class FamilierelasjonerTest {
relasjon = Familierelasjon.Relasjon.FAR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("mor"),
ident = Ident.FolkeregisterIdent.Gjeldende("mor"),
relasjon = Familierelasjon.Relasjon.MOR
),
Familierelasjon(
ident = Ident.FolkeregisterIdent("barn"),
ident = Ident.FolkeregisterIdent.Gjeldende("barn"),
relasjon = Familierelasjon.Relasjon.BARN
),
)
Expand Down
Loading

0 comments on commit 14afe72

Please sign in to comment.