Skip to content

Commit

Permalink
refactoring fnr/Ident
Browse files Browse the repository at this point in the history
  • Loading branch information
jankroken-nav committed Oct 31, 2024
1 parent 0dc34d3 commit 8ec243b
Show file tree
Hide file tree
Showing 25 changed files with 121 additions and 80 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain

sealed class BarnetrygdException(msg: String, cause: Throwable) : RuntimeException(msg, cause) {
class FeilVedHentingAvPersonId(val fnr: String, msg: String, cause: Throwable) : BarnetrygdException(msg, cause)
class OverlappendePerioder(msg: String, cause: Throwable): BarnetrygdException(msg, cause)
class FeilVedHentingAvPersonId(val fnr: Ident, msg: String, cause: Throwable) : BarnetrygdException(msg, cause)
class OverlappendePerioder(msg: String, cause: Throwable) : BarnetrygdException(msg, cause)
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ data class Barnetrygdinformasjon(
val id: UUID,
val barnetrygdmottakerId: UUID,
val created: Instant = Instant.now(),
val ident: String,
val ident: Ident,
val persongrunnlag: List<PersongrunnlagMelding.Persongrunnlag>,
valdata: Rådata,
val correlationId: CorrelationId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain

data class Ident(val value: String) {
init {
assert(value.matches("^[0-9]+$".toRegex())) { "Ugyldig verdi for Ident: $value" }
}

override fun toString(): String {
return "Ident($value)"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ class KompletteringsService(

val barnetrygdmottaker = barnetrygdmottakerUtenPdlData.withPerson(
try {
hentPersonId(barnetrygdmottakerUtenPdlData.ident, "barnetrygdmottaker")
println("kompletter(BarnetrygdmottakerUtenPdlData.ident=${barnetrygdmottakerUtenPdlData.ident}")
hentPersonId(Ident(barnetrygdmottakerUtenPdlData.ident), "barnetrygdmottaker")
} catch (e: PersonOppslagException) {
throw BarnetrygdException.FeilVedHentingAvPersonId(
fnr = barnetrygdmottakerUtenPdlData.ident,
fnr = Ident(barnetrygdmottakerUtenPdlData.ident),
msg = "Feil ved henting av barnetrygdmottaker fra PDL",
cause = e,
)
Expand Down Expand Up @@ -130,17 +131,22 @@ class KompletteringsService(
fun oppdaterAlleFnr(barnetrygdData: PersongrunnlagOgRådata): PersongrunnlagOgRådata {
try {
val saker = barnetrygdData.persongrunnlag.map { sak ->
val omsorgsyter = hentPersonId(sak.omsorgsyter, "omsorgsyter").fnr
val omsorgsyter = hentPersonId(Ident(sak.omsorgsyter), "omsorgsyter").fnr
val omsorgsperioder = sak.omsorgsperioder.map { omsorgsperiode ->
val omsorgsmottaker =
hentPersonId(omsorgsperiode.omsorgsmottaker, "omsorgsmottaker, barnetrygd").fnr
omsorgsperiode.copy(omsorgsmottaker = omsorgsmottaker)
hentPersonId(Ident(omsorgsperiode.omsorgsmottaker), "omsorgsmottaker, barnetrygd").fnr
omsorgsperiode.copy(omsorgsmottaker = omsorgsmottaker.value)
}.distinct()
val hjelpestønadperioder = sak.hjelpestønadsperioder.map {
it.copy(omsorgsmottaker = hentPersonId(it.omsorgsmottaker, "omsorgsmottaker, hjelpestønad").fnr)
it.copy(
omsorgsmottaker = hentPersonId(
Ident(it.omsorgsmottaker),
"omsorgsmottaker, hjelpestønad"
).fnr.value
)
}.distinct()
sak.copy(
omsorgsyter = omsorgsyter,
omsorgsyter = omsorgsyter.value,
omsorgsperioder = omsorgsperioder,
hjelpestønadsperioder = hjelpestønadperioder
)
Expand All @@ -155,16 +161,22 @@ class KompletteringsService(
}
}

private fun hentPersonId(fnr: String, beskrivelse: String): PersonId {
private fun hentPersonId(fnr: Ident, beskrivelse: String): PersonId {
try {
return personIdService.personFromIdent(fnr)!!
} catch (e: PersonOppslagException) {
throw BarnetrygdException.FeilVedHentingAvPersonId(fnr, "Feil ved oppslag i PDL for '$beskrivelse'", e)
println("XXXX: feil")
e.printStackTrace()
throw BarnetrygdException.FeilVedHentingAvPersonId(
fnr,
"Feil ved oppslag i PDL for '$beskrivelse'",
e
)
}
}

fun ekspanderFnrTilAlleIHistorikken(fnrs: Set<String>): Set<String> {
return fnrs.flatMap { personIdService.personFromIdent(it)!!.historiske }.toSet()
return fnrs.flatMap { personIdService.personFromIdent(Ident(it))!!.historiske }.toSet()
}

data class Komplettert(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain

data class PersonId(
val fnr: String,
val fnr: Ident,
val historiske: Set<String>
) {
fun identifisertAv(fnr: String): Boolean {
return historiske.contains(fnr)
}
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ class PersonIdService(
CacheBuilder.newBuilder()
.expireAfterWrite(Duration.ofMinutes(5))
.maximumSize(30)
.build<String, PersonId>()
.build<Ident, PersonId>()

fun personFromIdent(fnr: String): PersonId? {
fun personFromIdent(fnr: Ident): PersonId? {
return when (val personId: PersonId? = cache.getIfPresent(fnr)) {
is PersonId -> personId
null -> {
val personId = pdlService.hentPerson(fnr)
personId.historiske.forEach {
cache.put(it, personId)
cache.put(Ident(it), personId)
}
personId
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain

interface PersonOppslag {
fun hentPerson(fnr: String): PersonId
fun hentPerson(fnr: Ident): PersonId
}

data class PersonOppslagException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,12 @@ class SendTilBestemService(
null,
serialize(
Topics.Omsorgsopptjening.Key(
ident = barnetrygdinformasjon.ident,
ident = barnetrygdinformasjon.ident.value,
)
),
serialize(
PersongrunnlagMelding(
omsorgsyter = barnetrygdinformasjon.ident,
omsorgsyter = barnetrygdinformasjon.ident.value,
persongrunnlag = barnetrygdinformasjon.persongrunnlag,
rådata = barnetrygdinformasjon.rådata,
innlesingId = barnetrygdinformasjon.innlesingId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.micrometer.core.instrument.MeterRegistry
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Mdc
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.web.client.RestTemplateBuilder
Expand Down Expand Up @@ -34,9 +35,9 @@ class PdlClient(
value = [RestClientException::class, PdlException::class],
backoff = Backoff(delay = 1500L, maxDelay = 30000L, multiplier = 2.5)
)
fun hentPerson(fnr: String): PdlResponse? {
fun hentPerson(fnr: Ident): PdlResponse? {
val entity = RequestEntity<PdlQuery>(
PdlQuery(graphqlQuery.hentPersonQuery(), FnrVariables(ident = fnr)),
PdlQuery(graphqlQuery.hentPersonQuery(), FnrVariables(ident = fnr.value)),
HttpHeaders().apply {
add("Nav-Call-Id", Mdc.getCorrelationId().toString())
add("Nav-Consumer-Id", "omsorgsopptjening-start-innlesning")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.external.pdl

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonId
import java.time.LocalDateTime

Expand Down Expand Up @@ -40,8 +41,10 @@ data class HentPersonQueryResponse(
}

fun toDomain(): PersonId {
println("identhistorikk:gjeldende: ${identhistorikk().gjeldende().ident}")
println("identhistorikk:historikk: ${identhistorikk().historikk()}")
return PersonId(
fnr = identhistorikk().gjeldende().ident,
fnr = Ident(identhistorikk().gjeldende().ident),
historiske = identhistorikk().historikk().map { it.ident }.toSet()
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.external.pdl

import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonId
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonOppslag
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonOppslagException
Expand All @@ -10,7 +11,8 @@ class PdlService(
private val pdlClient: PdlClient
) : PersonOppslag {

override fun hentPerson(fnr: String): PersonId {
override fun hentPerson(fnr: Ident): PersonId {
println("hentPerson: fnr=$fnr")
try {
val pdlResponse = pdlClient.hentPerson(fnr = fnr)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.Rådata
import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.messages.domene.PersongrunnlagMelding
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Barnetrygdinformasjon
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Barnetrygdmottaker
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.repository.PersonSerialization.toPerson
import org.springframework.jdbc.core.RowMapper
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
Expand Down Expand Up @@ -53,7 +54,7 @@ class BarnetrygdinformasjonRepository(
"id" to barnetrygdinformasjon.id,
"barnetrygdmottaker_id" to barnetrygdinformasjon.barnetrygdmottakerId,
"created" to Instant.now().toString(),
"ident" to barnetrygdinformasjon.ident,
"ident" to barnetrygdinformasjon.ident.value,
"persongrunnlag" to serialize(barnetrygdinformasjon.persongrunnlag),
"rådata" to serialize(barnetrygdinformasjon.rådata),
"correlationId" to barnetrygdinformasjon.correlationId.toUUID(),
Expand Down Expand Up @@ -186,7 +187,7 @@ class BarnetrygdinformasjonRepository(
id = UUID.fromString(rs.getString("id")),
barnetrygdmottakerId = UUID.fromString(rs.getString("barnetrygdmottaker_id")),
created = rs.getTimestamp("created").toInstant(),
ident = rs.getString("ident"),
ident = Ident(rs.getString("ident")),
persongrunnlag = deserialize<List<PersongrunnlagMelding.Persongrunnlag>>(rs.getString("persongrunnlag")),
rådata = deserialize<Rådata>(rs.getString("rådata")),
correlationId = CorrelationId.fromString(rs.getString("correlationId")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class BarnetrygdmottakerRepository(
MapSqlParameterSource(
mapOf<String, Any?>(
"id" to barnetrygdmottaker.id,
"personid_gjeldende" to barnetrygdmottaker.personId?.fnr,
"personid_gjeldende" to barnetrygdmottaker.personId?.fnr?.value,
"personid_historikk" to barnetrygdmottaker.personId?.toJson(),
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {

@Test
fun `full flyt med fnr-historikk og oppdatering`() {
fun fnr(i: Int) = format("%011d", i)
fun fnr(i: Int) = Ident(format("%011d", i))
wiremock.pdl(fnr(1), listOf(fnr(1_1), fnr(1_2), fnr(1_3)))
wiremock.pdl(fnr(2), listOf(fnr(2_1), fnr(2_2), fnr(2_3)))
wiremock.pdl(fnr(3), listOf(fnr(3_1), fnr(3_2), fnr(3_3)))
Expand Down Expand Up @@ -201,7 +201,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {
val mottatt = Barnetrygdmottaker.Mottatt(
id = UUID.randomUUID(),
opprettet = Instant.now(),
ident = fnr(1_2),
ident = fnr(1_2).value,
personId = null,
correlationId = CorrelationId.generate(),
innlesingId = InnlesingId.generate(),
Expand All @@ -220,23 +220,23 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {
println(komplettert)
assertThat(komplettert.barnetrygdmottaker.personId?.fnr).isEqualTo(fnr(1))
assertThat(komplettert.persongrunnlag).hasSize(1)
assertThat(komplettert.persongrunnlag[0].omsorgsyter).isEqualTo(fnr(1))
assertThat(komplettert.persongrunnlag[0].omsorgsyter).isEqualTo(fnr(1).value)
assertThat(komplettert.persongrunnlag[0].omsorgsperioder).hasSize(2)
assertThat(komplettert.persongrunnlag[0].hjelpestønadsperioder).hasSize(1)
}


@Test
fun `barnetrygdmottaker finnes ikke i PDL`() {
fun fnr(i: Int) = format("%011d", i)
fun fnr(i: Int) = Ident(format("%011d", i))
wiremock.`pdl error not_found`()

wiremock.`hent-barnetrygd ok - ingen perioder`()

val mottatt = Barnetrygdmottaker.Mottatt(
id = UUID.randomUUID(),
opprettet = Instant.now(),
ident = fnr(1_1),
ident = fnr(1_1).value,
personId = null,
correlationId = CorrelationId.generate(),
innlesingId = InnlesingId.generate(),
Expand All @@ -259,13 +259,13 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {

@Test
fun `omsorgsmottaker finnes ikke i PDL`() {
fun fnr(i: Int) = format("%011d", i)
wiremock.`pdl error not_found`(fnr(1))
fun fnr(i: Int) = Ident(format("%011d", i))
wiremock.`pdl error not_found`(fnr(1).value)

val mottatt = Barnetrygdmottaker.Mottatt(
id = UUID.randomUUID(),
opprettet = Instant.now(),
ident = fnr(1),
ident = fnr(1).value,
personId = null,
correlationId = CorrelationId.generate(),
innlesingId = InnlesingId.generate(),
Expand All @@ -288,7 +288,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {

@Test
fun `omsorgsmottaker har overlappende perioder`() {
fun fnr(i: Int) = format("%011d", i)
fun fnr(i: Int) = Ident(format("%011d", i))
wiremock.pdl(fnr(1), listOf(fnr(1_1), fnr(1_2)))
wiremock.pdl(fnr(2), listOf(fnr(2_1), fnr(2_2)))

Expand Down Expand Up @@ -339,7 +339,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {
val mottatt = Barnetrygdmottaker.Mottatt(
id = UUID.randomUUID(),
opprettet = Instant.now(),
ident = fnr(1_2),
ident = fnr(1_2).value,
personId = null,
correlationId = CorrelationId.generate(),
innlesingId = InnlesingId.generate(),
Expand All @@ -362,7 +362,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {

@Test
fun `hjelpestønad har overlappende perioder`() {
fun fnr(i: Int) = format("%011d", i)
fun fnr(i: Int) = Ident(format("%011d", i))
wiremock.pdl(fnr(1), listOf(fnr(1_1), fnr(1_2), fnr(1_3)))
wiremock.pdl(fnr(2), listOf(fnr(2_1), fnr(2_2), fnr(2_3)))
wiremock.pdl(fnr(3), listOf(fnr(3_1), fnr(3_2), fnr(3_3)))
Expand Down Expand Up @@ -436,7 +436,7 @@ class KompletteringsServiceTest : SpringContextTest.NoKafka() {
val mottatt = Barnetrygdmottaker.Mottatt(
id = UUID.randomUUID(),
opprettet = Instant.now(),
ident = fnr(1_2),
ident = fnr(1_2).value,
personId = null,
correlationId = CorrelationId.generate(),
innlesingId = InnlesingId.generate(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.S
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.BarnetrygdInnlesing
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Barnetrygdinformasjon
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Barnetrygdmottaker
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
Expand Down Expand Up @@ -80,7 +81,7 @@ class BarnetrygdinformasjonRepositoryTest(
return Barnetrygdinformasjon(
id = UUID.randomUUID(),
barnetrygdmottakerId = barnetrygdmottaker.id,
ident = "00000000002", // forskjellig fra barnetrygdmottaker, siden den kan være oppdatert
ident = Ident("00000000002"), // forskjellig fra barnetrygdmottaker, siden den kan være oppdatert
persongrunnlag = listOf(
PersongrunnlagMelding.Persongrunnlag(
omsorgsyter = "00000000002",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.SpringContextTest
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.BarnetrygdInnlesing
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Barnetrygdmottaker
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonId
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.assertInstanceOf
Expand Down Expand Up @@ -107,7 +108,7 @@ class BarnetrygdmottakerRepositoryTest : SpringContextTest.NoKafka() {
innlesingId = innlesing.id,
)
val mottatt = barnetrygdmottakerRepository.insert(barnetrygdmottaker).withPerson(
PersonId("12345123452", setOf("12345123451", "12345123452"))
PersonId(Ident("12345123452"), setOf("12345123451", "12345123452"))
)
barnetrygdmottakerRepository.updatePersonIdent(mottatt)
val oppdatert = barnetrygdmottakerRepository.find(mottatt.id)!!
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.repository

import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.Ident
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.domain.PersonId
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.repository.PersonSerialization.toJson
import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.repository.PersonSerialization.toPerson
Expand All @@ -10,7 +11,7 @@ class PersonIdSerializationTest {
@Test
fun `kan serialisere og deserialisere en person med kun gjeldende ident`() {
val personId = PersonId(
fnr = "12345678901",
fnr = Ident("12345678901"),
historiske = setOf("12345678901"),
)
val json = personId.toJson()
Expand Down
Loading

0 comments on commit 8ec243b

Please sign in to comment.