Skip to content

Commit

Permalink
IS-1821: Invalidere inaktive behandlere (#294)
Browse files Browse the repository at this point in the history
  • Loading branch information
geir-waagboe authored Feb 6, 2024
1 parent 81f751f commit 01345dc
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 16 deletions.
5 changes: 5 additions & 0 deletions src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt
Original file line number Diff line number Diff line change
@@ -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.*
Expand Down Expand Up @@ -263,6 +264,10 @@ class BehandlerService(
database.updateSuspensjon(behandlerPersonident, suspendert)
}

fun invalidateBehandler(behandlerRef: UUID) {
database.invalidateBehandler(behandlerRef)
}

fun existsOtherValidKontorWithSameHerId(
behandlerKontor: PBehandlerKontor,
partnerIds: List<Int>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -42,23 +43,15 @@ 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

// TODO: Hvis duplikat fra før: invalidere behandlerforekomst som ikke stemmer overens med Adresseregisteret

// 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 {
Expand All @@ -77,6 +70,24 @@ class VerifyBehandlereForKontorCronjob(
)
}

private fun invalidateInactiveBehandlere(
inaktiveBehandlereForKontor: List<BehandlerKontorFraAdresseregisteretDTO.BehandlerFraAdresseregisteretDTO>,
existingBehandlereForKontor: List<PBehandler>
) {
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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
}
}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/test/kotlin/no/nav/syfo/testhelper/UserConstants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -19,7 +20,7 @@ fun generateBehandlerKontorResponse(
telefon = "",
epost = "",
orgnummer = null,
behandlere = listOf(generateBehandlerFraAdresseregisteret()),
behandlere = listOf(generateBehandlerFraAdresseregisteret(behandlerHprIdInactive)),
)

fun generateBehandlerKontorAdresse() = BehandlerKontorFraAdresseregisteretDTO.Adresse(
Expand All @@ -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,
)
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 01345dc

Please sign in to comment.