Skip to content

Commit

Permalink
♻️ Bruk ekte behandlingId i utgående varsel_endret
Browse files Browse the repository at this point in the history
Før behandlingId var et konsept i vedtaksløsningen ble en behandlingId
oppdiktet og lagt til i nevnte event og saksbehandler_løsning for å
knytte sammen varsler og godkjenninger i Spaghet. Nå kan vi bruke
den ekte behandlingId'en i stedet
  • Loading branch information
chsko committed Sep 3, 2024
1 parent 676c6c2 commit 8d794f3
Show file tree
Hide file tree
Showing 23 changed files with 51 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ interface Godkjenninghåndterer {
godkjenningDTO: GodkjenningDto,
epost: String,
oid: UUID,
behandlingId: UUID,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ class VedtakMutation(

when (val vedtak = kanFatteVedtak(oppgavereferanse.toLong(), saksbehandler, tilganger)) {
is VedtakResultat.Success -> {
val behandlingId = UUID.randomUUID()
val behandlingId = vedtak.spleisBehandlingId
val godkjenning = GodkjenningDto(oppgavereferanse.toLong(), true, saksbehandler.ident, null, null, null, avslag)

saksbehandlerhåndterer.håndter(godkjenning, behandlingId, saksbehandler)
godkjenninghåndterer.håndter(godkjenning, saksbehandler.epost, saksbehandler.oid, behandlingId)
godkjenninghåndterer.håndter(godkjenning, saksbehandler.epost, saksbehandler.oid)

newResult<Boolean>().data(true).build()
}
Expand Down Expand Up @@ -83,7 +83,7 @@ class VedtakMutation(

when (val vedtak = kanFatteVedtak(oppgavereferanse.toLong(), saksbehandler, tilganger)) {
is VedtakResultat.Success -> {
val behandlingId = UUID.randomUUID()
val behandlingId = vedtak.spleisBehandlingId
val godkjenning =
GodkjenningDto(
oppgavereferanse.toLong(),
Expand All @@ -95,7 +95,7 @@ class VedtakMutation(
)

saksbehandlerhåndterer.håndter(godkjenning, behandlingId, saksbehandler)
godkjenninghåndterer.håndter(godkjenning, saksbehandler.epost, saksbehandler.oid, behandlingId)
godkjenninghåndterer.håndter(godkjenning, saksbehandler.epost, saksbehandler.oid)

newResult<Boolean>().data(true).build()
}
Expand All @@ -119,6 +119,7 @@ class VedtakMutation(
tilganger: SaksbehandlerTilganger,
): VedtakResultat {
val erÅpenOppgave = oppgavehåndterer.venterPåSaksbehandler(oppgavereferanse)
val spleisBehandlingId = oppgavehåndterer.spleisBehandlingId(oppgavereferanse)
if (!erÅpenOppgave) {
return VedtakResultat.Error(
VedtakError.IkkeÅpenOppgave(
Expand All @@ -145,11 +146,11 @@ class VedtakMutation(
totrinnsvurderinghåndterer.settBeslutter(oppgavereferanse, saksbehandler.oid)
}

return VedtakResultat.Success
return VedtakResultat.Success(spleisBehandlingId = spleisBehandlingId)
}

sealed class VedtakResultat {
data object Success : VedtakResultat()
data class Success(val spleisBehandlingId: UUID) : VedtakResultat()

data class Error(val error: VedtakError) : VedtakResultat()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,6 @@ import java.util.UUID
import javax.sql.DataSource

class OppgaveApiDao(dataSource: DataSource) : HelseDao(dataSource) {
fun lagreBehandlingsreferanse(
oppgaveId: Long,
behandlingId: UUID,
) {
asSQL(
"INSERT INTO oppgave_behandling_kobling(oppgave_id, behandling_id) VALUES (:oppgaveId, :behandlingId)",
mapOf("oppgaveId" to oppgaveId, "behandlingId" to behandlingId),
).update()
}

fun finnOppgaveId(vedtaksperiodeId: UUID) =
asSQL(
""" SELECT id FROM oppgave
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ interface Oppgavehåndterer {

fun venterPåSaksbehandler(oppgaveId: Long): Boolean

fun spleisBehandlingId(oppgaveId: Long): UUID

fun oppgaver(
saksbehandlerFraApi: SaksbehandlerFraApi,
offset: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ internal class GodkjenningMediator(
val generasjonDao: GenerasjonDao,
) {
internal fun saksbehandlerUtbetaling(
behandlingId: UUID,
context: CommandContext,
behov: UtbetalingsgodkjenningMessage,
vedtaksperiodeId: UUID,
Expand All @@ -45,7 +44,6 @@ internal class GodkjenningMediator(
spleisBehandlingId: UUID?,
) {
behov.godkjennManuelt(
behandlingId = behandlingId,
saksbehandlerIdent = saksbehandlerIdent,
saksbehandlerEpost = saksbehandlerEpost,
godkjenttidspunkt = godkjenttidspunkt,
Expand All @@ -67,7 +65,6 @@ internal class GodkjenningMediator(
}

internal fun saksbehandlerAvvisning(
behandlingId: UUID,
context: CommandContext,
behov: UtbetalingsgodkjenningMessage,
vedtaksperiodeId: UUID,
Expand All @@ -83,7 +80,6 @@ internal class GodkjenningMediator(
spleisBehandlingId: UUID?,
) {
behov.avvisManuelt(
behandlingId = behandlingId,
saksbehandlerIdent = saksbehandlerIdent,
saksbehandlerEpost = saksbehandlerEpost,
godkjenttidspunkt = godkjenttidspunkt,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ internal class GodkjenningService(
godkjenningDTO: GodkjenningDto,
epost: String,
oid: UUID,
behandlingId: UUID,
) {
val hendelseId = oppgaveDao.finnHendelseId(godkjenningDTO.oppgavereferanse)
val fødselsnummer = meldingDao.finnFødselsnummer(hendelseId)
Expand All @@ -77,7 +76,6 @@ internal class GodkjenningService(
"fødselsnummer" to fødselsnummer,
"oppgaveId" to godkjenningDTO.oppgavereferanse,
"hendelseId" to hendelseId,
"behandlingId" to behandlingId,
"godkjent" to godkjenningDTO.godkjent,
"saksbehandlerident" to godkjenningDTO.saksbehandlerIdent,
"saksbehandleroid" to oid,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,6 @@ internal class Kommandofabrikk(
val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId)
val utbetaling = utbetalingDao.utbetalingFor(oppgaveId)
return UtbetalingsgodkjenningCommand(
behandlingId = melding.behandlingId,
fødselsnummer = fødselsnummer,
vedtaksperiodeId = vedtaksperiodeId,
spleisBehandlingId = spleisBehandlingId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,6 @@ internal class SaksbehandlerMediator(
}

VentDao.slettPåVent(godkjenning.oppgavereferanse)
oppgaveApiDao.lagreBehandlingsreferanse(godkjenning.oppgavereferanse, behandlingId)
godkjenning.avslag?.let {
if (it.handling == Avslagshandling.INVALIDER) {
avslagDao.invaliderAvslag(godkjenning.oppgavereferanse)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal class SaksbehandlerløsningRiver(
override fun validations() =
River.PacketValidation {
it.demandValue("@event_name", "saksbehandler_løsning")
it.requireKey("@id", "fødselsnummer", "oppgaveId", "hendelseId", "behandlingId")
it.requireKey("@id", "fødselsnummer", "oppgaveId", "hendelseId")
it.requireKey("godkjent", "saksbehandlerident", "saksbehandleroid", "saksbehandlerepost")
it.require("godkjenttidspunkt", JsonNode::asLocalDateTime)
it.requireKey("saksbehandler", "saksbehandler.ident", "saksbehandler.epostadresse")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,16 @@ class OppgaveDao(dataSource: DataSource) : HelseDao(dataSource), OppgaveReposito
mapOf("oppgaveId" to oppgaveId),
).single { it.uuid("utbetaling_id") }

fun finnSpleisBehandlingId(oppgaveId: Long) =
requireNotNull(
asSQL(
""" SELECT spleis_behandling_id FROM oppgave o
INNER JOIN selve_vedtaksperiode_generasjon svg ON svg.unik_id = o.generasjon_ref
WHERE o.id = :oppgaveId; """,
mapOf("oppgaveId" to oppgaveId),
).single { it.uuid("spleis_behandling_id") },
)

fun finnIdForAktivOppgave(vedtaksperiodeId: UUID) =
asSQL(
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ internal class OppgaveService(

override fun venterPåSaksbehandler(oppgaveId: Long): Boolean = oppgaveDao.venterPåSaksbehandler(oppgaveId)

override fun spleisBehandlingId(oppgaveId: Long): UUID = oppgaveDao.finnSpleisBehandlingId(oppgaveId)

override fun oppgaver(
saksbehandlerFraApi: SaksbehandlerFraApi,
offset: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
begrunnelser: List<String>? = null,
) {
løs(
behandlingId = null,
automatisk = true,
godkjent = godkjent,
saksbehandlerIdent = AUTOMATISK_BEHANDLET_IDENT,
Expand All @@ -48,14 +47,12 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
}

internal fun godkjennManuelt(
behandlingId: UUID,
saksbehandlerIdent: String,
saksbehandlerEpost: String,
godkjenttidspunkt: LocalDateTime,
saksbehandleroverstyringer: List<UUID>,
) {
løsManuelt(
behandlingId = behandlingId,
godkjent = true,
saksbehandlerIdent = saksbehandlerIdent,
saksbehandlerEpost = saksbehandlerEpost,
Expand All @@ -68,7 +65,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
}

internal fun avvisManuelt(
behandlingId: UUID,
saksbehandlerIdent: String,
saksbehandlerEpost: String,
godkjenttidspunkt: LocalDateTime,
Expand All @@ -78,7 +74,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
saksbehandleroverstyringer: List<UUID>,
) {
løsManuelt(
behandlingId = behandlingId,
godkjent = false,
saksbehandlerIdent = saksbehandlerIdent,
saksbehandlerEpost = saksbehandlerEpost,
Expand All @@ -91,7 +86,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
}

private fun løsManuelt(
behandlingId: UUID,
godkjent: Boolean,
saksbehandlerIdent: String,
saksbehandlerEpost: String,
Expand All @@ -102,7 +96,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
saksbehandleroverstyringer: List<UUID>,
) {
løs(
behandlingId = behandlingId,
automatisk = false,
godkjent = godkjent,
saksbehandlerIdent = saksbehandlerIdent,
Expand All @@ -116,7 +109,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
}

private fun løs(
behandlingId: UUID?,
automatisk: Boolean,
godkjent: Boolean,
saksbehandlerIdent: String,
Expand Down Expand Up @@ -151,9 +143,6 @@ internal class UtbetalingsgodkjenningMessage(json: String, private val utbetalin
behov["@løsning"] = løsning
behov["@id"] = UUID.randomUUID()
behov["@opprettet"] = LocalDateTime.now()
// Foreløpig opprettes behandlingId kun ved godkjenning/avvisning av oppgave. For at den ikke skal være optional utad
// genererer vi en random uuid her. På sikt vil behandlingId sannsynligvis følge med fra vi mottar et godkjenningsbehov.
behov["behandlingId"] = behandlingId ?: UUID.randomUUID()
}

internal fun lagVedtaksperiodeGodkjentManuelt(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import java.time.LocalDateTime
import java.util.UUID

internal class UtbetalingsgodkjenningCommand(
private val behandlingId: UUID,
private valdselsnummer: String,
private val vedtaksperiodeId: UUID,
private val spleisBehandlingId: UUID?,
Expand Down Expand Up @@ -40,7 +39,6 @@ internal class UtbetalingsgodkjenningCommand(
val behov = UtbetalingsgodkjenningMessage(behovJson, utbetaling)
if (godkjent) {
godkjenningMediator.saksbehandlerUtbetaling(
behandlingId = behandlingId,
context = context,
behov = behov,
vedtaksperiodeId = vedtaksperiodeId,
Expand All @@ -56,7 +54,6 @@ internal class UtbetalingsgodkjenningCommand(
)
} else {
godkjenningMediator.saksbehandlerAvvisning(
behandlingId = behandlingId,
context = context,
behov = behov,
vedtaksperiodeId = vedtaksperiodeId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import java.util.UUID

internal class Saksbehandlerløsning private constructor(
override val id: UUID,
val behandlingId: UUID,
val oppgaveId: Long,
val godkjenningsbehovhendelseId: UUID,
private valdselsnummer: String,
Expand All @@ -34,7 +33,6 @@ internal class Saksbehandlerløsning private constructor(
) : Personmelding {
internal constructor(packet: JsonMessage) : this(
id = UUID.fromString(packet["@id"].asText()),
behandlingId = UUID.fromString(packet["behandlingId"].asText()),
oppgaveId = packet["oppgaveId"].asLong(),
godkjenningsbehovhendelseId = UUID.fromString(packet["hendelseId"].asText()),
fødselsnummer = packet["fødselsnummer"].asText(),
Expand Down Expand Up @@ -65,7 +63,6 @@ internal class Saksbehandlerløsning private constructor(
)
internal constructor(jsonNode: JsonNode) : this(
id = UUID.fromString(jsonNode["@id"].asText()),
behandlingId = UUID.fromString(jsonNode["behandlingId"].asText()),
oppgaveId = jsonNode["oppgaveId"].asLong(),
godkjenningsbehovhendelseId = UUID.fromString(jsonNode["hendelseId"].asText()),
fødselsnummer = jsonNode["fødselsnummer"].asText(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ internal abstract class AbstractIntegrationTest : AbstractE2ETest() {
assertNotNull(løsning.path("fødselsnummer").asText())
assertNotNull(løsning.get("oppgaveId").asLong())
assertNotNull(løsning.get("hendelseId").asText())
assertNotNull(løsning.get("behandlingId").asText())
assertNotNull(løsning.get("saksbehandlerident").asText())
assertNotNull(løsning.path("saksbehandleroid").asText())
assertNotNull(løsning.path("saksbehandlerepost").asText())
Expand Down
10 changes: 10 additions & 0 deletions spesialist-selve/src/test/kotlin/no/nav/helse/db/OppgaveDaoTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@ class OppgaveDaoTest : DatabaseIntegrationTest() {
)
}

@Test
fun `finn SpleisBehandlingId`() {
val spleisBehandlingId = UUID.randomUUID()
opprettPerson()
opprettArbeidsgiver()
opprettVedtaksperiode(spleisBehandlingId = spleisBehandlingId)
opprettOppgave(contextId = CONTEXT_ID)
assertEquals(spleisBehandlingId, oppgaveDao.finnSpleisBehandlingId(oppgaveId))
}

@Test
fun `skal ikke lagre ny oppgave dersom det allerede er en eksisterende oppgave på samme person med gitt status`() {
opprettPerson()
Expand Down
Loading

0 comments on commit 8d794f3

Please sign in to comment.