diff --git a/pdl-client/src/main/resources/pdl/hentPerson.graphql b/pdl-client/src/main/resources/pdl/hentPerson.graphql index 7ff7a845f..f70de01ef 100644 --- a/pdl-client/src/main/resources/pdl/hentPerson.graphql +++ b/pdl-client/src/main/resources/pdl/hentPerson.graphql @@ -38,6 +38,29 @@ query($ident: ID!, $bostedHistorikk: Boolean!, $statsborgerskapHistorikk: Boolea historisk } }, + opphold(historikk: true){ + type + oppholdFra + oppholdTil + metadata{ + historisk + master + endringer{ + type, + kilde, + registrert, + registrertAv, + systemkilde + } + } + folkeregistermetadata { + aarsak, + ajourholdstidspunkt, + gyldighetstidspunkt, + opphoerstidspunkt, + kilde + } + }, doedsfall{ doedsdato }, @@ -71,9 +94,11 @@ query($ident: ID!, $bostedHistorikk: Boolean!, $statsborgerskapHistorikk: Boolea historisk }, folkeregistermetadata { + aarsak ajourholdstidspunkt, gyldighetstidspunkt, - opphoerstidspunkt + opphoerstidspunkt, + kilde } }, utflyttingFraNorge{ diff --git a/src/main/kotlin/no/nav/medlemskap/HttpServer.kt b/src/main/kotlin/no/nav/medlemskap/HttpServer.kt index 5df42ab45..8b4f70945 100644 --- a/src/main/kotlin/no/nav/medlemskap/HttpServer.kt +++ b/src/main/kotlin/no/nav/medlemskap/HttpServer.kt @@ -12,8 +12,6 @@ import io.ktor.server.plugins.callid.* import io.ktor.server.plugins.callloging.* import io.ktor.server.plugins.contentnegotiation.* import io.ktor.server.plugins.statuspages.* -import io.ktor.server.request.* -import io.ktor.server.response.* import io.ktor.server.routing.* import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics @@ -21,8 +19,9 @@ import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics import io.micrometer.core.instrument.binder.system.ProcessorMetrics -import io.micrometer.prometheus.PrometheusConfig -import io.micrometer.prometheus.PrometheusMeterRegistry +import io.micrometer.prometheusmetrics.PrometheusConfig +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry +import io.prometheus.client.CollectorRegistry import mu.KotlinLogging import no.nav.medlemskap.clients.Services import no.nav.medlemskap.common.* @@ -34,7 +33,6 @@ import no.nav.medlemskap.config.getAadConfig import no.nav.medlemskap.domene.Datagrunnlag import no.nav.medlemskap.domene.Request import no.nav.medlemskap.routes.* -import org.slf4j.event.* import org.slf4j.event.Level import java.util.* @@ -101,7 +99,9 @@ createHttpServer( val requestContextService = RequestContextService() if (useAuthentication) { routing { - naisRoutes(readinessCheck = { applicationState.initialized }, livenessCheck = { applicationState.running }, collectorRegistry = prometheusRegistry.prometheusRegistry) + naisRoutes( + readinessCheck = { applicationState.initialized }, livenessCheck = { applicationState.running }, collectorRegistry = CollectorRegistry.defaultRegistry + ) if (services.configuration.cluster == "dev-gcp") setupSwaggerDocApi() evalueringRoute(services, configuration, requestContextService, createDatagrunnlag) reglerRoute() @@ -109,7 +109,7 @@ createHttpServer( } } else { routing { - naisRoutes(readinessCheck = { applicationState.initialized }, livenessCheck = { applicationState.running }, collectorRegistry = prometheusRegistry.prometheusRegistry) + naisRoutes(readinessCheck = { applicationState.initialized }, livenessCheck = { applicationState.running }, collectorRegistry = CollectorRegistry.defaultRegistry) if (services.configuration.cluster == "dev-gcp") setupSwaggerDocApi() evalueringTestRoute(services, configuration, requestContextService, createDatagrunnlag) reglerRoute() diff --git a/src/main/kotlin/no/nav/medlemskap/common/Metrics.kt b/src/main/kotlin/no/nav/medlemskap/common/Metrics.kt index b71d5eda6..f31733099 100644 --- a/src/main/kotlin/no/nav/medlemskap/common/Metrics.kt +++ b/src/main/kotlin/no/nav/medlemskap/common/Metrics.kt @@ -2,9 +2,9 @@ package no.nav.medlemskap.common import io.micrometer.core.instrument.* import io.micrometer.core.instrument.config.MeterFilter -import io.micrometer.prometheus.PrometheusConfig -import io.micrometer.prometheus.PrometheusMeterRegistry -import io.micrometer.prometheus.PrometheusRenameFilter +import io.micrometer.prometheusmetrics.PrometheusConfig +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry +import io.micrometer.prometheusmetrics.PrometheusRenameFilter import no.nav.medlemskap.common.influx.SensuInfluxConfig import no.nav.medlemskap.common.influx.SensuInfluxMeterRegistry import no.nav.medlemskap.domene.Ytelse diff --git a/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Folkeregistermetadata.kt b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Folkeregistermetadata.kt index d930d9531..eea663cc6 100644 --- a/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Folkeregistermetadata.kt +++ b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Folkeregistermetadata.kt @@ -5,5 +5,6 @@ import java.time.LocalDateTime data class Folkeregistermetadata( val ajourholdstidspunkt: LocalDateTime?, val gyldighetstidspunkt: LocalDateTime?, - val opphoerstidspunkt: LocalDateTime? + val opphoerstidspunkt: LocalDateTime?, + val aarsak: String? ) diff --git a/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Opphold.kt b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Opphold.kt new file mode 100644 index 000000000..1d3478722 --- /dev/null +++ b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Opphold.kt @@ -0,0 +1,43 @@ +package no.nav.medlemskap.domene.personhistorikk + +import java.time.LocalDate +import java.time.LocalDateTime + +data class Opphold( + val type: OppholdstillatelseType, + val oppholdFra: LocalDate?, + val oppholdTil: LocalDate?, + val medtadata: OppholdMetadata, + val folkeregistermetadata: Folkeregistermetadata +) + +enum class OppholdstillatelseType { + MIDLERTIDIG, + PERMANENT, + OPPLYSNING_MANGLER, + __UNKNOWN_VALUE +} + +data class OppholdMetadata( + val historisk: Boolean, + val master: String, + val endringer: List +) + +data class Endring( + val type: Endringstype, + val kilde: String, + val registrert: LocalDateTime, + val registrertAv: String, + val systemkilde: String + +) +enum class Endringstype { + OPPRETT, + KORRIGER, + OPPHOER, + /** + * This is a default enum value that will be used when attempting to deserialize unknown value. + */ + __UNKNOWN_VALUE, +} diff --git a/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Personhistorikk.kt b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Personhistorikk.kt index 1c85caa96..6edbd2425 100644 --- a/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Personhistorikk.kt +++ b/src/main/kotlin/no/nav/medlemskap/domene/personhistorikk/Personhistorikk.kt @@ -14,7 +14,8 @@ data class Personhistorikk( val doedsfall: List, val innflyttingTilNorge: List, val utflyttingFraNorge: List, - val navn: List + val navn: List, + val oppholdstilatelser: List = emptyList() ) { fun erBrukerDoed(): Boolean { diff --git a/src/main/kotlin/no/nav/medlemskap/services/pdl/mapper/PdlMapper.kt b/src/main/kotlin/no/nav/medlemskap/services/pdl/mapper/PdlMapper.kt index e82ffbce8..fd69a45a7 100644 --- a/src/main/kotlin/no/nav/medlemskap/services/pdl/mapper/PdlMapper.kt +++ b/src/main/kotlin/no/nav/medlemskap/services/pdl/mapper/PdlMapper.kt @@ -6,11 +6,13 @@ import no.nav.medlemskap.clients.pdl.generated.DateTime import no.nav.medlemskap.clients.pdl.generated.hentperson.* import no.nav.medlemskap.common.exceptions.DetteSkalAldriSkje import no.nav.medlemskap.domene.personhistorikk.* +import no.nav.medlemskap.domene.personhistorikk.Endring import no.nav.medlemskap.domene.personhistorikk.Folkeregistermetadata import no.nav.medlemskap.domene.personhistorikk.ForelderBarnRelasjon import no.nav.medlemskap.domene.personhistorikk.InnflyttingTilNorge import no.nav.medlemskap.domene.personhistorikk.Metadata import no.nav.medlemskap.domene.personhistorikk.Navn +import no.nav.medlemskap.domene.personhistorikk.Opphold import no.nav.medlemskap.domene.personhistorikk.Sivilstand import no.nav.medlemskap.domene.personhistorikk.Statsborgerskap import no.nav.medlemskap.domene.personhistorikk.UtflyttingFraNorge @@ -35,6 +37,7 @@ object PdlMapper { val innflyttingTilNorge: List = mapInnflyttingTilNorge(person.innflyttingTilNorge) val utflyttingFraNorge: List = mapUtflyttingFraNorge(person.utflyttingFraNorge) val navn: List = mapNavn(person.navn) + val opphold: List = mapOppholdsTilatelser(person.opphold) return Personhistorikk( statsborgerskap = statsborgerskap, @@ -46,10 +49,48 @@ object PdlMapper { doedsfall = doedsfall, innflyttingTilNorge = innflyttingTilNorge, utflyttingFraNorge = utflyttingFraNorge, - navn = navn + navn = navn, + oppholdstilatelser = opphold + ) } + private fun mapOppholdsTilatelser(opphold: List): List { + + return opphold.map { + Opphold( + type = OppholdstillatelseType.valueOf(it.type.name), + oppholdFra = mapDate(it.oppholdFra), + oppholdTil = mapDate(it.oppholdTil), + medtadata = OppholdMetadata(it.metadata.historisk, it.metadata.master, mapEnringer(it.metadata.endringer)), + folkeregistermetadata = mapFolkeregistermetadata(it.folkeregistermetadata) + ) + } + } + + private fun mapDateTime(registrert: String): LocalDateTime { + return LocalDateTime.parse(registrert) + } + + private fun mapEnringer(endringer: List): List { + return endringer.map { + Endring( + type = Endringstype.valueOf(it.type.name), + kilde = it.kilde, + registrert = mapDateTime(it.registrert), + registrertAv = it.registrertAv, + systemkilde = it.systemkilde + ) + } + } + + private fun mapDate(dato: String?): LocalDate? { + if (dato != null) { + return LocalDate.parse(dato) + } + return null + } + private fun mapInnflyttingTilNorge(innflyttingTilNorge: List): List { return innflyttingTilNorge.map { InnflyttingTilNorge( @@ -65,7 +106,8 @@ object PdlMapper { return Folkeregistermetadata( ajourholdstidspunkt = parseNullableDateTimeFraPDL(folkeregistermetadata?.ajourholdstidspunkt), gyldighetstidspunkt = parseNullableDateTimeFraPDL(folkeregistermetadata?.gyldighetstidspunkt), - opphoerstidspunkt = parseNullableDateTimeFraPDL(folkeregistermetadata?.opphoerstidspunkt) + opphoerstidspunkt = parseNullableDateTimeFraPDL(folkeregistermetadata?.opphoerstidspunkt), + aarsak = folkeregistermetadata?.aarsak ) } diff --git a/src/main/resources/lovme.yaml b/src/main/resources/lovme.yaml index 97a157b02..282609ee9 100644 --- a/src/main/resources/lovme.yaml +++ b/src/main/resources/lovme.yaml @@ -660,6 +660,10 @@ components: type: array items: $ref: "#/components/schemas/Navn" + oppholdstilatelser: + type: array + items: + nullable: true PersonhistorikkBarn: properties: ident: diff --git a/src/test/kotlin/no/nav/medlemskap/clients/pdl/PdlClientHentPersonTest.kt b/src/test/kotlin/no/nav/medlemskap/clients/pdl/PdlClientHentPersonTest.kt index a985b0af2..efab8f359 100644 --- a/src/test/kotlin/no/nav/medlemskap/clients/pdl/PdlClientHentPersonTest.kt +++ b/src/test/kotlin/no/nav/medlemskap/clients/pdl/PdlClientHentPersonTest.kt @@ -139,6 +139,7 @@ class PdlClientHentPersonTest { } } ], + "opphold":[], "adressebeskyttelse": [], "sivilstand": [ { diff --git a/src/test/kotlin/no/nav/medlemskap/clients/pdl/mapper/PdlClientHentEktefelleTest.kt b/src/test/kotlin/no/nav/medlemskap/clients/pdl/mapper/PdlClientHentEktefelleTest.kt index 1ff44b8be..adf5a2d99 100644 --- a/src/test/kotlin/no/nav/medlemskap/clients/pdl/mapper/PdlClientHentEktefelleTest.kt +++ b/src/test/kotlin/no/nav/medlemskap/clients/pdl/mapper/PdlClientHentEktefelleTest.kt @@ -83,6 +83,7 @@ class PdlClientHentEktefelleTest { "minRolleForPerson": "FAR" } ], + "opphold":[], "statsborgerskap": [ { "land": "NOR", diff --git a/src/test/kotlin/no/nav/medlemskap/cucumber/steps/pdl/PdlMapperSteps.kt b/src/test/kotlin/no/nav/medlemskap/cucumber/steps/pdl/PdlMapperSteps.kt index ed6246699..2abeed186 100644 --- a/src/test/kotlin/no/nav/medlemskap/cucumber/steps/pdl/PdlMapperSteps.kt +++ b/src/test/kotlin/no/nav/medlemskap/cucumber/steps/pdl/PdlMapperSteps.kt @@ -203,7 +203,8 @@ class PdlMapperSteps : No { adressebeskyttelse = adressebeskyttelse, innflyttingTilNorge = innflyttingTilNorge, utflyttingFraNorge = utflyttingFraNorge, - navn = navn + navn = navn, + opphold = emptyList() ) } } diff --git a/src/test/resources/testpersoner/bakoverkompatibeltest/forventetRespons.json b/src/test/resources/testpersoner/bakoverkompatibeltest/forventetRespons.json index ef8a199b6..25d362bc2 100644 --- a/src/test/resources/testpersoner/bakoverkompatibeltest/forventetRespons.json +++ b/src/test/resources/testpersoner/bakoverkompatibeltest/forventetRespons.json @@ -57,7 +57,8 @@ "fornavn" : "Test", "mellomnavn" : null, "etternavn" : "Person" - } ] + } ], + "oppholdstilatelser" : [ ] }, "medlemskap" : [ { "dekning" : "dekning",