Skip to content

Commit

Permalink
IS-2732: Oppdatere fra DNR til FNR fra Adresseregisteret (#366)
Browse files Browse the repository at this point in the history
  • Loading branch information
geir-waagboe authored Oct 17, 2024
1 parent 0ee9d42 commit 5d9fec3
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 25 deletions.
4 changes: 4 additions & 0 deletions src/main/kotlin/no/nav/syfo/behandler/BehandlerService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,10 @@ class BehandlerService(
database.updateBehandlerIdenter(behandlerRef, identer)
}

fun updateBehandlerPersonident(behandlerRef: UUID, personident: String) {
database.updateBehandlerPersonident(behandlerRef, personident)
}

fun updateBehandlerNavnAndKategoriAndHerId(
behandlerRef: UUID,
fornavn: String,
Expand Down
21 changes: 21 additions & 0 deletions src/main/kotlin/no/nav/syfo/behandler/database/BehandlerQuery.kt
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,27 @@ fun DatabaseInterface.updateBehandlerIdenter(behandlerRef: UUID, identer: Map<Be
}
}

const val queryUpdateBehandlerPersonident =
"""
UPDATE BEHANDLER
SET personident = ?,
updated_at = ?
WHERE behandler_ref=?
"""

fun DatabaseInterface.updateBehandlerPersonident(behandlerRef: UUID, personident: String) {
this.connection.use { connection ->
connection.prepareStatement(queryUpdateBehandlerPersonident)
.use {
it.setString(1, personident)
it.setObject(2, OffsetDateTime.now())
it.setString(3, behandlerRef.toString())
it.executeUpdate()
}
connection.commit()
}
}

const val queryInvalidateBehandler =
"""
UPDATE BEHANDLER
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import no.nav.syfo.behandler.fastlege.FastlegeClient
import no.nav.syfo.client.syfohelsenettproxy.SyfohelsenettproxyClient
import no.nav.syfo.domain.Personident
import no.nav.syfo.domain.isDNR
import no.nav.syfo.domain.isDnrMatchingFnr
import no.nav.syfo.util.nowUTC
import org.slf4j.LoggerFactory
import java.time.DayOfWeek
Expand Down Expand Up @@ -297,18 +298,33 @@ class VerifyBehandlereForKontorCronjob(
} else if (existingBehandlereWithSameHprId.size == 1) {
val existingBehandler = existingBehandlereWithSameHprId[0]
val hprBehandlerFnr = syfohelsenettproxyClient.finnBehandlerFraHpr(behandlerFraAdresseregisteretHprId)?.fnr
if (hprBehandlerFnr == null || hprBehandlerFnr != existingBehandler.personident) {
log.warn("VerifyBehandlereForKontorCronjob: Mismatched personident: ${existingBehandler.behandlerRef}")
if (hprBehandlerFnr == null) {
log.warn("VerifyBehandlereForKontorCronjob: HPR-personident missing: ${existingBehandler.behandlerRef}")
} else {
// both hpr and personident match: update name, herid and kategori
behandlerService.updateBehandlerNavnAndKategoriAndHerId(
behandlerRef = existingBehandler.behandlerRef,
fornavn = behandlerFraAdresseregisteret.fornavn,
mellomnavn = behandlerFraAdresseregisteret.mellomnavn,
etternavn = behandlerFraAdresseregisteret.etternavn,
kategori = BehandlerKategori.fromKategoriKode(behandlerFraAdresseregisteret.kategori),
herId = behandlerFraAdresseregisteret.herId.toString(),
)
val hprPersonident = Personident(hprBehandlerFnr)
val existingPersonIdent = existingBehandler.personident?.let { Personident(it) }

val doUpdatePersonident = existingPersonIdent == null || existingPersonIdent.isDnrMatchingFnr(hprPersonident)
// TODO: handle remaining case: personident changed, but not DNR from before
if (doUpdatePersonident) {
behandlerService.updateBehandlerPersonident(
behandlerRef = existingBehandler.behandlerRef,
personident = hprBehandlerFnr,
)
}
val doUpdate = doUpdatePersonident || existingPersonIdent == hprPersonident
if (doUpdate) {
behandlerService.updateBehandlerNavnAndKategoriAndHerId(
behandlerRef = existingBehandler.behandlerRef,
fornavn = behandlerFraAdresseregisteret.fornavn,
mellomnavn = behandlerFraAdresseregisteret.mellomnavn,
etternavn = behandlerFraAdresseregisteret.etternavn,
kategori = BehandlerKategori.fromKategoriKode(behandlerFraAdresseregisteret.kategori),
herId = behandlerFraAdresseregisteret.herId.toString(),
)
} else {
log.warn("VerifyBehandlereForKontorCronjob: Mismatched personident: ${existingBehandler.behandlerRef}")
}
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/no/nav/syfo/domain/Personident.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ data class Personident(val value: String) {
val elevenDigits = Regex("^\\d{11}\$")

fun Personident.isDNR() = this.value[0].digitToInt() > 3

fun Personident.isDnrMatchingFnr(other: Personident) =
isDNR() && !other.isDNR() && value.substring(1, 6) == other.value.substring(1, 6)
Original file line number Diff line number Diff line change
Expand Up @@ -203,13 +203,13 @@ class VerifyBehandlereForKontorCronjobSpek : Spek({
}
val behandlerAfter = database.getBehandlereForKontor(kontorId)
behandlerAfter.size shouldBeEqualTo 2
val pBehandlerAfter = behandlerAfter.firstOrNull { it.hprId == HPRID.toString() }
pBehandlerAfter!!.id shouldBeEqualTo pBehandler.id
pBehandlerAfter!!.behandlerRef shouldBeEqualTo pBehandler.behandlerRef
pBehandlerAfter!!.fornavn shouldBeEqualTo BEHANDLER_FORNAVN
pBehandlerAfter!!.etternavn shouldBeEqualTo BEHANDLER_ETTERNAVN
pBehandlerAfter!!.herId shouldBeEqualTo HERID.toString()
pBehandlerAfter!!.kategori shouldBeEqualTo BehandlerKategori.LEGE.name
val pBehandlerAfter = behandlerAfter.first { it.hprId == HPRID.toString() }
pBehandlerAfter.id shouldBeEqualTo pBehandler.id
pBehandlerAfter.behandlerRef shouldBeEqualTo pBehandler.behandlerRef
pBehandlerAfter.fornavn shouldBeEqualTo BEHANDLER_FORNAVN
pBehandlerAfter.etternavn shouldBeEqualTo BEHANDLER_ETTERNAVN
pBehandlerAfter.herId shouldBeEqualTo HERID.toString()
pBehandlerAfter.kategori shouldBeEqualTo BehandlerKategori.LEGE.name
}
it("Cronjob oppdaterer eksisterende behandler selv om kategori mangler i Adresseregisteret") {
val kontorId = createKontor(HERID_KONTOR_OK)
Expand All @@ -226,13 +226,37 @@ class VerifyBehandlereForKontorCronjobSpek : Spek({
}
val behandlerAfter = database.getBehandlereForKontor(kontorId)
behandlerAfter.size shouldBeEqualTo 2
val pBehandlerAfter = behandlerAfter.firstOrNull { it.hprId == HPRID_UTEN_KATEGORI.toString() }
pBehandlerAfter!!.id shouldBeEqualTo pBehandler.id
pBehandlerAfter!!.behandlerRef shouldBeEqualTo pBehandler.behandlerRef
pBehandlerAfter!!.fornavn shouldBeEqualTo BEHANDLER_FORNAVN
pBehandlerAfter!!.etternavn shouldBeEqualTo BEHANDLER_ETTERNAVN
pBehandlerAfter!!.herId shouldBeEqualTo HERID.toString()
pBehandlerAfter!!.kategori shouldBeEqualTo BehandlerKategori.TANNLEGE.name
val pBehandlerAfter = behandlerAfter.first { it.hprId == HPRID_UTEN_KATEGORI.toString() }
pBehandlerAfter.id shouldBeEqualTo pBehandler.id
pBehandlerAfter.behandlerRef shouldBeEqualTo pBehandler.behandlerRef
pBehandlerAfter.fornavn shouldBeEqualTo BEHANDLER_FORNAVN
pBehandlerAfter.etternavn shouldBeEqualTo BEHANDLER_ETTERNAVN
pBehandlerAfter.herId shouldBeEqualTo HERID.toString()
pBehandlerAfter.kategori shouldBeEqualTo BehandlerKategori.TANNLEGE.name
}
it("Cronjob oppdaterer eksisterende behandler med DNR der forekomsten i Adresseregisteret har FNR") {
val kontorId = createKontor(HERID_KONTOR_OK)
val pBehandler = createBehandler(
kontorId = kontorId,
hprId = HPRID,
personident = FASTLEGE_DNR,
fornavn = "for",
etternavn = "etter",
kategori = BehandlerKategori.LEGE,
)
runBlocking {
cronJob.verifyBehandlereForKontorJob()
}
val behandlerAfter = database.getBehandlereForKontor(kontorId)
behandlerAfter.size shouldBeEqualTo 2
val pBehandlerAfter = behandlerAfter.first { it.hprId == HPRID.toString() }
pBehandlerAfter.id shouldBeEqualTo pBehandler.id
pBehandlerAfter.personident shouldBeEqualTo FASTLEGE_FNR.value
pBehandlerAfter.behandlerRef shouldBeEqualTo pBehandler.behandlerRef
pBehandlerAfter.fornavn shouldBeEqualTo BEHANDLER_FORNAVN
pBehandlerAfter.etternavn shouldBeEqualTo BEHANDLER_ETTERNAVN
pBehandlerAfter.herId shouldBeEqualTo HERID.toString()
pBehandlerAfter.kategori shouldBeEqualTo BehandlerKategori.LEGE.name
}
it("Cronjob legger til ny behandler og invaliderer eksisterende") {
val kontorId = createKontor(HERID_KONTOR_OK)
Expand Down

0 comments on commit 5d9fec3

Please sign in to comment.