From 01345dc182dbfce1d4a5bde0dc55c28a7d0b6d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Arne=20Waagb=C3=B8?= <79845894+geir-waagboe@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:15:56 +0100 Subject: [PATCH] IS-1821: Invalidere inaktive behandlere (#294) --- .../no/nav/syfo/behandler/BehandlerService.kt | 5 +++ .../VerifyBehandlereForKontorCronjob.kt | 33 ++++++++++----- .../VerifyBehandlereForKontorCronjobSpek.kt | 42 +++++++++++++++++++ .../no/nav/syfo/testhelper/UserConstants.kt | 1 + .../BehandlerKontorResponseGenerator.kt | 13 +++--- .../syfo/testhelper/mocks/FastlegeRestMock.kt | 1 + 6 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt b/src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt index 6a1d7bf6..5d2021b6 100644 --- a/src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt +++ b/src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt @@ -1,6 +1,7 @@ package no.nav.syfo.behandler import no.nav.syfo.application.database.DatabaseInterface +import no.nav.syfo.behandler.api.behandlerPersonident import no.nav.syfo.behandler.database.* import no.nav.syfo.behandler.database.domain.* import no.nav.syfo.behandler.domain.* @@ -263,6 +264,10 @@ class BehandlerService( database.updateSuspensjon(behandlerPersonident, suspendert) } + fun invalidateBehandler(behandlerRef: UUID) { + database.invalidateBehandler(behandlerRef) + } + fun existsOtherValidKontorWithSameHerId( behandlerKontor: PBehandlerKontor, partnerIds: List, diff --git a/src/main/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjob.kt b/src/main/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjob.kt index ec15cccb..8313c17e 100644 --- a/src/main/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjob.kt +++ b/src/main/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjob.kt @@ -2,8 +2,9 @@ package no.nav.syfo.cronjob import net.logstash.logback.argument.StructuredArguments import no.nav.syfo.behandler.BehandlerService +import no.nav.syfo.behandler.database.domain.PBehandler +import no.nav.syfo.behandler.fastlege.BehandlerKontorFraAdresseregisteretDTO import no.nav.syfo.behandler.fastlege.FastlegeClient -import no.nav.syfo.domain.Personident import org.slf4j.LoggerFactory import java.util.UUID @@ -42,14 +43,8 @@ class VerifyBehandlereForKontorCronjob( log.info("VerifyBehandlereForKontorCronjob: Fant ${aktiveBehandlereForKontor.size} aktive behandlere for kontor ${behandlerKontor.herId} i Adresseregisteret") log.info("VerifyBehandlereForKontorCronjob: Fant ${inaktiveBehandlereForKontor.size} inaktive behandlere for kontor ${behandlerKontor.herId} i Adresseregisteret") log.info("VerifyBehandlereForKontorCronjob: Fant ${existingBehandlereForKontor.size} behandlere for kontor ${behandlerKontor.herId} i Modia") - val firstBehandler = aktiveBehandlereForKontor.firstOrNull { it.personIdent != null } - if (firstBehandler != null) { - try { - Personident(firstBehandler.personIdent!!) - } catch (exc: IllegalArgumentException) { - log.info("VerifyBehandlereForKontorCronjob: Got invalid personident for behandler") - } - } + + invalidateInactiveBehandlere(inaktiveBehandlereForKontor, existingBehandlereForKontor) // TODO: Hvis duplikater fra før: invalidere behandlerforekomst med D-nr @@ -57,8 +52,6 @@ class VerifyBehandlereForKontorCronjob( // TODO: Hvis finnes fra før: oppdatere behandlerforekomst - // TODO: Hvis finnes fra før, men deaktivert i adresseregisteret: sette invalidated-timestamp - // TODO: Hvis deaktivert fra før, men aktiv i adresseregisteret: sette invalidated=null } } else { @@ -77,6 +70,24 @@ class VerifyBehandlereForKontorCronjob( ) } + private fun invalidateInactiveBehandlere( + inaktiveBehandlereForKontor: List, + existingBehandlereForKontor: List + ) { + inaktiveBehandlereForKontor.filter { + it.hprId != null + }.forEach { behandlerFraAdresseregisteret -> + val behandlerFraAdresseregisteretHprId = behandlerFraAdresseregisteret.hprId!!.toString() + val existingBehandlere = existingBehandlereForKontor.filter { + it.hprId == behandlerFraAdresseregisteretHprId && it.invalidated == null + } + existingBehandlere.forEach { existingBehandler -> + behandlerService.invalidateBehandler(existingBehandler.behandlerRef) + log.info("VerifyBehandlereForKontorCronjob: behandler ${existingBehandler.behandlerRef} invalidated since inactive in Adresseregisteret") + } + } + } + companion object { private val log = LoggerFactory.getLogger(VerifyBehandlereForKontorCronjob::class.java) } diff --git a/src/test/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjobSpek.kt b/src/test/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjobSpek.kt index 4826e5a6..96021b7c 100644 --- a/src/test/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjobSpek.kt +++ b/src/test/kotlin/no/nav/syfo/cronjob/VerifyBehandlereForKontorCronjobSpek.kt @@ -4,18 +4,28 @@ import io.ktor.server.testing.* import io.mockk.clearAllMocks import kotlinx.coroutines.runBlocking import no.nav.syfo.behandler.BehandlerService +import no.nav.syfo.behandler.database.createBehandler +import no.nav.syfo.behandler.database.domain.toBehandlerKontor +import no.nav.syfo.behandler.database.getBehandlerById import no.nav.syfo.behandler.database.getBehandlerKontorById +import no.nav.syfo.behandler.domain.Behandler +import no.nav.syfo.behandler.domain.BehandlerKategori import no.nav.syfo.behandler.fastlege.FastlegeClient import no.nav.syfo.behandler.partnerinfo.PartnerinfoClient import no.nav.syfo.client.azuread.AzureAdClient import no.nav.syfo.testhelper.* +import no.nav.syfo.testhelper.UserConstants.BEHANDLER_ETTERNAVN +import no.nav.syfo.testhelper.UserConstants.BEHANDLER_FORNAVN import no.nav.syfo.testhelper.UserConstants.HERID import no.nav.syfo.testhelper.UserConstants.HERID_NOT_ACTIVE +import no.nav.syfo.testhelper.UserConstants.HPRID_INACTVE import no.nav.syfo.testhelper.UserConstants.KONTOR_NAVN import no.nav.syfo.testhelper.UserConstants.PARTNERID import org.amshove.kluent.* import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe +import java.time.OffsetDateTime +import java.util.* class VerifyBehandlereForKontorCronjobSpek : Spek({ describe(VerifyBehandlereForKontorCronjobSpek::class.java.simpleName) { @@ -92,6 +102,38 @@ class VerifyBehandlereForKontorCronjobSpek : Spek({ val kontorAfter = database.getBehandlerKontorById(kontorId) kontorAfter.dialogmeldingEnabled shouldNotBeEqualTo null } + it("Cronjob invaliderer behandler som er inaktiv i Adresseregisteret") { + val hprIdForInactiveBehandlerInAdresseregistreret = HPRID_INACTVE + val kontorId = database.createKontor( + partnerId = PARTNERID, + herId = HERID, + navn = KONTOR_NAVN, + ) + val pBehandler = database.createBehandler( + behandler = Behandler( + behandlerRef = UUID.randomUUID(), + fornavn = BEHANDLER_FORNAVN, + mellomnavn = null, + etternavn = BEHANDLER_ETTERNAVN, + telefon = null, + personident = null, + herId = HERID, + hprId = hprIdForInactiveBehandlerInAdresseregistreret, + kontor = database.getBehandlerKontorById(kontorId).toBehandlerKontor(), + kategori = BehandlerKategori.LEGE, + mottatt = OffsetDateTime.now(), + suspendert = false, + ), + kontorId = kontorId, + ) + val behandlerBefore = database.getBehandlerById(pBehandler.id) + behandlerBefore!!.invalidated shouldBeEqualTo null + runBlocking { + cronJob.verifyBehandlereForKontorJob() + } + val behandlerAfter = database.getBehandlerById(pBehandler.id) + behandlerAfter!!.invalidated shouldNotBeEqualTo null + } } } } diff --git a/src/test/kotlin/no/nav/syfo/testhelper/UserConstants.kt b/src/test/kotlin/no/nav/syfo/testhelper/UserConstants.kt index 0c3cf32a..bf44b162 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/UserConstants.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/UserConstants.kt @@ -30,6 +30,7 @@ object UserConstants { const val HERID = 404 const val HPRID = 1337 + const val HPRID_INACTVE = 1338 const val OTHER_HERID = 604 const val OTHER_HPRID = 804 const val HERID_UTEN_PARTNERINFO = 504 diff --git a/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerKontorResponseGenerator.kt b/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerKontorResponseGenerator.kt index ac9d51da..85692c6f 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerKontorResponseGenerator.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerKontorResponseGenerator.kt @@ -5,11 +5,12 @@ import no.nav.syfo.behandler.fastlege.BehandlerKontorFraAdresseregisteretDTO import no.nav.syfo.testhelper.UserConstants import no.nav.syfo.testhelper.UserConstants.FASTLEGE_FNR import no.nav.syfo.testhelper.UserConstants.HERID -import no.nav.syfo.testhelper.UserConstants.HPRID +import no.nav.syfo.testhelper.UserConstants.HPRID_INACTVE fun generateBehandlerKontorResponse( kontorHerId: Int, aktiv: Boolean = true, + behandlerHprIdInactive: Int, ) = BehandlerKontorFraAdresseregisteretDTO( aktiv = aktiv, herId = kontorHerId, @@ -19,7 +20,7 @@ fun generateBehandlerKontorResponse( telefon = "", epost = "", orgnummer = null, - behandlere = listOf(generateBehandlerFraAdresseregisteret()), + behandlere = listOf(generateBehandlerFraAdresseregisteret(behandlerHprIdInactive)), ) fun generateBehandlerKontorAdresse() = BehandlerKontorFraAdresseregisteretDTO.Adresse( @@ -28,13 +29,15 @@ fun generateBehandlerKontorAdresse() = BehandlerKontorFraAdresseregisteretDTO.Ad poststed = "Oslo", ) -fun generateBehandlerFraAdresseregisteret() = BehandlerKontorFraAdresseregisteretDTO.BehandlerFraAdresseregisteretDTO( - aktiv = true, +fun generateBehandlerFraAdresseregisteret( + hprId: Int, +) = BehandlerKontorFraAdresseregisteretDTO.BehandlerFraAdresseregisteretDTO( + aktiv = hprId != HPRID_INACTVE, fornavn = UserConstants.BEHANDLER_FORNAVN, mellomnavn = null, etternavn = UserConstants.BEHANDLER_ETTERNAVN, personIdent = FASTLEGE_FNR.value, herId = HERID, - hprId = HPRID, + hprId = hprId, kategori = BehandlerKategori.LEGE.kategoriKode, ) diff --git a/src/test/kotlin/no/nav/syfo/testhelper/mocks/FastlegeRestMock.kt b/src/test/kotlin/no/nav/syfo/testhelper/mocks/FastlegeRestMock.kt index d542358b..e8e76552 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/mocks/FastlegeRestMock.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/mocks/FastlegeRestMock.kt @@ -21,6 +21,7 @@ fun MockRequestHandleScope.fastlegeRestMockResponse(request: HttpRequestData): H generateBehandlerKontorResponse( kontorHerId = kontorHerId, aktiv = kontorHerId != UserConstants.HERID_NOT_ACTIVE, + behandlerHprIdInactive = UserConstants.HPRID_INACTVE, ) ) } else if (isVikarRequest) {