Skip to content

Commit

Permalink
skjul personinfo om adressebeskyttede personer i refusjonsløsning
Browse files Browse the repository at this point in the history
  • Loading branch information
sondrele committed Oct 30, 2024
1 parent 171e902 commit 35666b6
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ fun httpJsonClient(engine: HttpClientEngine = CIO.create()) = HttpClient(engine)
json(
Json {
ignoreUnknownKeys = true
coerceInputValues = true
},
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
import io.ktor.server.plugins.*
import io.ktor.server.request.receive
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.server.util.*
import io.ktor.util.pipeline.*
import kotlinx.serialization.Serializable
import no.nav.mulighetsrommet.api.clients.pdl.PdlGradering
import no.nav.mulighetsrommet.api.clients.pdl.PdlIdent
import no.nav.mulighetsrommet.api.domain.dto.DeltakerDto
import no.nav.mulighetsrommet.api.okonomi.models.DeltakelsePeriode
Expand Down Expand Up @@ -228,16 +229,12 @@ private suspend fun getPersoner(

return pdl.hentPersonBolk(identer)
.map {
it.entries
.mapNotNull { (ident, person) ->
person.navn.firstOrNull()?.let { navn ->
RefusjonKravDeltakelse.Person(
norskIdent = NorskIdent(ident.value),
navn = "${navn.etternavn}, ${navn.fornavn}",
)
}
buildMap {
it.entries.forEach { (ident, person) ->
val refusjonskravPerson = toRefusjonskravPerson(person)
put(NorskIdent(ident.value), refusjonskravPerson)
}
.associateBy { person -> person.norskIdent }
}
}
.getOrElse {
throw StatusException(
Expand All @@ -247,6 +244,30 @@ private suspend fun getPersoner(
}
}

private fun toRefusjonskravPerson(person: HentPersonBolkResponse.Person) =
when (person.adressebeskyttelse.gradering) {
PdlGradering.UGRADERT -> {
val navn = person.navn.firstOrNull()?.let { navn ->
val fornavnOgMellomnavn = listOfNotNull(navn.fornavn, navn.mellomnavn)
.joinToString(" ")
.takeIf { it.isNotEmpty() }
listOfNotNull(navn.etternavn, fornavnOgMellomnavn).joinToString(", ")
}
val foedselsdato = person.foedselsdato.firstOrNull()
RefusjonKravDeltakelse.Person(
navn = navn ?: "Mangler navn",
fodselsaar = foedselsdato?.foedselsaar,
fodselsdato = foedselsdato?.foedselsdato,
)
}

else -> RefusjonKravDeltakelse.Person(
navn = "Adressebeskyttet",
fodselsaar = null,
fodselsdato = null,
)
}

@Serializable
data class RefusjonKravAft(
@Serializable(with = UUIDSerializer::class)
Expand Down Expand Up @@ -287,8 +308,10 @@ data class RefusjonKravDeltakelse(
) {
@Serializable
data class Person(
val norskIdent: NorskIdent,
val navn: String,
@Serializable(with = LocalDateSerializer::class)
val fodselsdato: LocalDate?,
val fodselsaar: Int?,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ data class HentPersonBolkResponse(

@Serializable
data class Adressebeskyttelse(
val gradering: PdlGradering?,
val gradering: PdlGradering = PdlGradering.UGRADERT,
)

@Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import arrow.core.nonEmptySetOf
import io.kotest.assertions.arrow.core.shouldBeRight
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import io.ktor.client.engine.mock.*
import io.ktor.http.content.*
import kotlinx.serialization.json.Json
import no.nav.mulighetsrommet.api.okonomi.refusjon.HentAdressebeskyttetPersonBolkPdlQuery
Expand All @@ -15,74 +16,68 @@ class HentPersonBolkPdlQueryTest : FunSpec({
test("happy case hentPersonBolk") {
val identer = nonEmptySetOf(PdlIdent("12345678910"), PdlIdent("12345678911"), PdlIdent("test"))

val pdl = PdlClient(
config = PdlClient.Config(baseUrl = "https://pdl.no"),
tokenProvider = { "token" },
clientEngine = createMockEngine(
"/graphql" to {
val clientEngine = createMockEngine(
"/graphql" to {

val body = Json.decodeFromString<GraphqlRequest<GraphqlRequest.Identer>>(
(it.body as TextContent).text,
)
body.variables.identer shouldBe identer
val body = Json.decodeFromString<GraphqlRequest<GraphqlRequest.Identer>>(
(it.body as TextContent).text,
)
body.variables.identer shouldBe identer

respondJson(
"""
{
"data": {
"hentPersonBolk": [
{
"ident": "12345678910",
"person": {
"navn": [
{
"fornavn": "Ola",
"mellomnavn": null,
"etternavn": "Normann"
}
],
"adressebeskyttelse": {
"gradering": null
},
"foedselsdato": [
{
"foedselsaar": 1980,
"foedselsdato": null
}
]
},
"code": "ok"
respondJson(
"""
{
"data": {
"hentPersonBolk": [
{
"ident": "12345678910",
"person": {
"navn": [
{
"fornavn": "Ola",
"mellomnavn": null,
"etternavn": "Normann"
}
],
"adressebeskyttelse": {
"gradering": "STRENGT_FORTROLIG"
},
"foedselsdato": [
{
"foedselsaar": 1980,
"foedselsdato": null
}
]
},
{
"ident": "12345678911",
"person": null,
"code": "not_found"
},
{
"ident": "test",
"person": null,
"code": "bad_request"
}
]
}
"code": "ok"
},
{
"ident": "12345678911",
"person": null,
"code": "not_found"
},
{
"ident": "test",
"person": null,
"code": "bad_request"
}
]
}
""".trimIndent(),
)
},
),
}
""".trimIndent(),
)
},
)

val query = HentAdressebeskyttetPersonBolkPdlQuery(pdl)
val query = HentAdressebeskyttetPersonBolkPdlQuery(createPdlClient(clientEngine))

val response = query.hentPersonBolk(identer).shouldBeRight()

response shouldBe mapOf(
query.hentPersonBolk(identer) shouldBeRight mapOf(
PdlIdent("12345678910") to HentPersonBolkResponse.Person(
navn = listOf(
PdlNavn(fornavn = "Ola", etternavn = "Normann"),
),
adressebeskyttelse = HentPersonBolkResponse.Adressebeskyttelse(
gradering = null,
gradering = PdlGradering.STRENGT_FORTROLIG,
),
foedselsdato = listOf(
HentPersonBolkResponse.Foedselsdato(
Expand All @@ -93,4 +88,50 @@ class HentPersonBolkPdlQueryTest : FunSpec({
),
)
}

test("tolker manglende gradering som UGRADERT") {
val clientEngine = createMockEngine(
"/graphql" to {
respondJson(
"""
{
"data": {
"hentPersonBolk": [
{
"ident": "12345678910",
"person": {
"navn": [],
"adressebeskyttelse": {
"gradering": null
},
"foedselsdato": []
},
"code": "ok"
}
]
}
}
""".trimIndent(),
)
},
)

val query = HentAdressebeskyttetPersonBolkPdlQuery(createPdlClient(clientEngine))

query.hentPersonBolk(nonEmptySetOf(PdlIdent("12345678910"))) shouldBeRight mapOf(
PdlIdent("12345678910") to HentPersonBolkResponse.Person(
navn = listOf(),
adressebeskyttelse = HentPersonBolkResponse.Adressebeskyttelse(
gradering = PdlGradering.UGRADERT,
),
foedselsdato = listOf(),
),
)
}
})

private fun createPdlClient(clientEngine: MockEngine) = PdlClient(
config = PdlClient.Config(baseUrl = "https://pdl.no"),
tokenProvider = { "token" },
clientEngine = clientEngine,
)

0 comments on commit 35666b6

Please sign in to comment.