Skip to content

Commit

Permalink
prioriter navn og kjønn som kommer fra PDL og ikke Freg (#5068)
Browse files Browse the repository at this point in the history
### 💰 Hva skal gjøres, og hvorfor?

[Favro](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-24082)

Ref [pdl-doc](https://pdl-docs.ansatt.nav.no/ekstern/index.html#_navn)
så ønsker vi å bruke PDL som master og ikke Freg når vi får verdier fra
begge.

Velger derfor å ta med metadata, master og historisk for å kunne
filtrere ut når det er flere kilder til navn/kjønn.

[Dokumentasjon om metadata og
kilder](https://pdl-docs.ansatt.nav.no/ekstern/index.html#felles)

### ✅ Checklist
_Har du husket alle punktene i listen?_
- [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene
🕵️
- [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell
deploy til miljø for å verifisere endringene.
- [x] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv
hvorfor under 👇

---------

Signed-off-by: FredrikP <[email protected]>
  • Loading branch information
fredrikpf authored Feb 12, 2025
1 parent 15b90b0 commit 835d955
Show file tree
Hide file tree
Showing 25 changed files with 453 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlUtenlandskAdressseRespo
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlVergeResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PersonInfo
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.VergemaalEllerFremtidsfullmakt
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.filtrerKjønnPåKilde
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.filtrerNavnPåKilde
import no.nav.familie.ba.sak.kjerne.personident.Aktør
import no.nav.familie.ba.sak.kjerne.personident.PersonidentService
import no.nav.familie.http.client.AbstractRestClient
Expand Down Expand Up @@ -97,8 +99,8 @@ class PdlRestClient(
PersonInfo(
// Hvis det ikke finnes fødselsdato på person forsøker vi å bruke dato for barnets død fordi det var et dødfødt barn.
fødselsdato = LocalDate.parse(it.foedselsdato.firstOrNull()?.foedselsdato ?: it.doedfoedtBarn.first().dato),
navn = it.navn.firstOrNull()?.fulltNavn(),
kjønn = it.kjoenn.firstOrNull()?.kjoenn,
navn = it.navn.filtrerNavnPåKilde()?.fulltNavn(),
kjønn = it.kjoenn.filtrerKjønnPåKilde()?.kjoenn,
forelderBarnRelasjon = forelderBarnRelasjon,
adressebeskyttelseGradering = it.adressebeskyttelse.firstOrNull()?.gradering,
bostedsadresser = it.bostedsadresse,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package no.nav.familie.ba.sak.integrasjoner.pdl.domene
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import no.nav.familie.ba.sak.common.PdlPersonKanIkkeBehandlesIFagSystemÅrsak
import no.nav.familie.ba.sak.common.PdlPersonKanIkkeBehandlesIFagsystem
import no.nav.familie.ba.sak.integrasjoner.pdl.logger
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Kjønn
import no.nav.familie.kontrakter.felles.personopplysning.Adressebeskyttelse
import no.nav.familie.kontrakter.felles.personopplysning.Bostedsadresse
Expand Down Expand Up @@ -65,6 +66,7 @@ data class PdlNavn(
val fornavn: String,
val mellomnavn: String? = null,
val etternavn: String,
val metadata: PdlMetadata,
) {
fun fulltNavn(): String =
when (mellomnavn) {
Expand All @@ -76,4 +78,32 @@ data class PdlNavn(
@JsonIgnoreProperties(ignoreUnknown = true)
data class PdlKjoenn(
val kjoenn: Kjønn,
val metadata: PdlMetadata,
)

data class PdlMetadata(
val master: String,
val historisk: Boolean,
)

// Filtrer på historisk slik at ikke-historiske alltid får prioritet
fun List<PdlNavn>.filtrerNavnPåKilde(): PdlNavn? =
this
.filter { it.metadata.historisk == false }
.minByOrNull { it.metadata.master.kildeTilPrioritet() }

// Filtrer på historisk slik at ikke-historiske alltid får prioritet
fun List<PdlKjoenn>.filtrerKjønnPåKilde(): PdlKjoenn? =
this
.filter { it.metadata.historisk == false }
.minByOrNull { it.metadata.master.kildeTilPrioritet() }

fun String.kildeTilPrioritet(): Int =
when (uppercase()) {
"PDL" -> 1
"FREG" -> 2
else -> {
logger.warn("Ukjent kilde fra PDL: $this. Bør legges til.")
3
}
}
8 changes: 8 additions & 0 deletions src/main/resources/pdl/hentperson-enkel.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,17 @@ query($ident: ID!) {person: hentPerson(ident: $ident) {
fornavn
mellomnavn
etternavn
metadata {
master
historisk
}
}
kjoenn {
kjoenn
metadata {
master
historisk
}
}
adressebeskyttelse {
gradering
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,17 @@ query($ident: ID!) {person: hentPerson(ident: $ident) {
fornavn
mellomnavn
etternavn
metadata {
master
historisk
}
}
kjoenn {
kjoenn
metadata {
master
historisk
}
}
forelderBarnRelasjon {
relatertPersonsIdent,
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/pdl/hentperson-navn-og-adresse.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ query($ident: ID!) {person: hentPerson(ident: $ident) {
fornavn
mellomnavn
etternavn
metadata {
master
historisk
}
}
bostedsadresse(historikk: false) {
gyldigTilOgMed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlAdressebeskyttelseRespo
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlBaseResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlHentPersonRelasjonerResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlHentPersonResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlMetadata
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlNavn
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.filtrerKjønnPåKilde
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.filtrerNavnPåKilde
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.Kjønn
import no.nav.familie.kontrakter.felles.objectMapper
import no.nav.familie.kontrakter.felles.personopplysning.ADRESSEBESKYTTELSEGRADERING
import no.nav.familie.kontrakter.felles.personopplysning.FORELDERBARNRELASJONROLLE
Expand Down Expand Up @@ -35,6 +39,14 @@ class PdlGraphqlTest {
.first()
.fornavn,
).isEqualTo("ENGASJERT")
assertThat(
resp.data.person!!
.navn
.first()
.metadata
.master
.uppercase(),
).isEqualTo("PDL")
assertThat(
resp.data.person!!
.kjoenn
Expand Down Expand Up @@ -209,10 +221,57 @@ class PdlGraphqlTest {

@Test
fun testFulltNavn() {
assertThat(PdlNavn(fornavn = "For", mellomnavn = "Mellom", etternavn = "Etter").fulltNavn())
.isEqualTo("For Mellom Etter")
assertThat(PdlNavn(fornavn = "For", etternavn = "Etter").fulltNavn())
.isEqualTo("For Etter")
assertThat(
PdlNavn(
fornavn = "For",
mellomnavn = "Mellom",
etternavn = "Etter",
metadata = PdlMetadata(master = "kilde", historisk = false),
).fulltNavn(),
).isEqualTo("For Mellom Etter")
assertThat(
PdlNavn(
fornavn = "For",
etternavn = "Etter",
metadata = PdlMetadata(master = "kilde", historisk = false),
).fulltNavn(),
).isEqualTo("For Etter")
}

@Test
fun testDeserialiseringAvResponsMedToNavn() {
val resp =
mapper.readValue<PdlBaseResponse<PdlHentPersonResponse>>(File(getFile("pdl/pdlMedToNavnOgToKjonn.json")))
assertThat(
resp.data.person!!
.navn
.filtrerNavnPåKilde()
?.etternavn,
).isEqualTo("NATUR")
}

@Test
fun testDeserialiseringAvResponsMedToKjønn() {
val resp =
mapper.readValue<PdlBaseResponse<PdlHentPersonResponse>>(File(getFile("pdl/pdlMedToNavnOgToKjonn.json")))
assertThat(
resp.data.person!!
.kjoenn
.filtrerKjønnPåKilde()
?.kjoenn,
).isEqualTo(Kjønn.KVINNE)
}

@Test
fun testDeserialiseringAvResponsMedUgyldigeKilder() {
val resp =
mapper.readValue<PdlBaseResponse<PdlHentPersonResponse>>(File(getFile("pdl/pdlMedToNavnOgToKjonn.json")))
assertThat(
resp.data.person!!
.kjoenn
.filtrerKjønnPåKilde()
?.kjoenn,
).isEqualTo(Kjønn.KVINNE)
}

private fun getFile(name: String): String = javaClass.classLoader?.getResource(name)?.file ?: error("Testkonfigurasjon feil")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlHentIdenterResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlHentPersonResponse
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlIdenter
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlKjoenn
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlMetadata
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlNavn
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlPersonData
import no.nav.familie.ba.sak.integrasjoner.pdl.domene.PdlPersonRequest
Expand Down Expand Up @@ -202,9 +203,10 @@ private fun enkelPdlHentPersonResponse(scenarioPerson: RestScenarioPerson): PdlP
fornavn = scenarioPerson.fornavn,
mellomnavn = null,
etternavn = scenarioPerson.etternavn,
metadata = PdlMetadata(master = "kilde", historisk = false),
),
),
kjoenn = listOf(PdlKjoenn(kjoenn = Kjønn.KVINNE)),
kjoenn = listOf(PdlKjoenn(kjoenn = Kjønn.KVINNE, metadata = PdlMetadata(master = "kilde", historisk = false))),
adressebeskyttelse = emptyList(),
sivilstand = listOf(Sivilstand(type = SIVILSTANDTYPE.UGIFT)),
bostedsadresse = scenarioPerson.bostedsadresser,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
"navn": [
{
"fornavn": "BARN",
"etternavn": "FYR"
"etternavn": "FYR",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [
Expand All @@ -30,7 +34,11 @@
],
"kjoenn": [
{
"kjoenn": "MANN"
"kjoenn": "MANN",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
"navn": [
{
"fornavn": "REAL",
"etternavn": "RUNDINGSBØYE"
"etternavn": "RUNDINGSBØYE",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [
Expand All @@ -30,7 +34,11 @@
],
"kjoenn": [
{
"kjoenn": "MANN"
"kjoenn": "MANN",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
"navn": [
{
"fornavn": "BARN",
"etternavn": "FYR"
"etternavn": "FYR",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [
Expand All @@ -30,7 +34,11 @@
],
"kjoenn": [
{
"kjoenn": "MANN"
"kjoenn": "MANN",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,21 @@
"navn": [
{
"fornavn": "BARN",
"etternavn": "FYR"
"etternavn": "FYR",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [],
"kjoenn": [
{
"kjoenn": "MANN"
"kjoenn": "MANN",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
"navn": [
{
"fornavn": "MOR",
"etternavn": "FYR"
"etternavn": "FYR",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [
Expand All @@ -30,7 +34,11 @@
],
"kjoenn": [
{
"kjoenn": "KVINNE"
"kjoenn": "KVINNE",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
"navn": [
{
"fornavn": "MOR",
"etternavn": "FYR"
"etternavn": "FYR",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"foedselsdato": [
Expand All @@ -30,7 +34,11 @@
],
"kjoenn": [
{
"kjoenn": "KVINNE"
"kjoenn": "KVINNE",
"metadata": {
"master": "PDL",
"historisk": false
}
}
],
"bostedsadresse": [
Expand Down
Loading

0 comments on commit 835d955

Please sign in to comment.