Skip to content

Commit

Permalink
🚧 Klargjør for å sende ut vergemålsbehov
Browse files Browse the repository at this point in the history
Vergemålsendepunkt er enda ikke klart, avventer å begynne å sende behov. Klar gjør vergemål og fullmakts-command for å ta i bruk nytt behov.

Co-authored-by: Øyvind Hagen <[email protected]>
  • Loading branch information
MartinMekk and oyvindhagen committed Aug 15, 2024
1 parent 4afbe6e commit f61b1d8
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import no.nav.helse.mediator.meldinger.løsninger.ArbeidsgiverRiver
import no.nav.helse.mediator.meldinger.løsninger.DokumentRiver
import no.nav.helse.mediator.meldinger.løsninger.EgenAnsattløsning
import no.nav.helse.mediator.meldinger.løsninger.FlerePersoninfoRiver
import no.nav.helse.mediator.meldinger.løsninger.Fullmaktløsning
import no.nav.helse.mediator.meldinger.løsninger.HentEnhetRiver
import no.nav.helse.mediator.meldinger.løsninger.InfotrygdutbetalingerRiver
import no.nav.helse.mediator.meldinger.løsninger.Inntektløsning
Expand Down Expand Up @@ -149,7 +150,11 @@ internal class MeldingMediator(
val fødselsnummer = jsonNode["fødselsnummer"]?.asText() ?: return true
if (fødselsnummer.toDoubleOrNull() == null) return true
val harPerson = personDao.findPersonByFødselsnummer(fødselsnummer) != null
if (!harPerson) sikkerlogg.warn("Ignorerer melding med event_name: {}, for fødselsnummer: {}", eventName, fødselsnummer)
if (!harPerson) sikkerlogg.warn(
"Ignorerer melding med event_name: {}, for fødselsnummer: {}",
eventName,
fødselsnummer
)
return harPerson
}

Expand All @@ -174,6 +179,7 @@ internal class MeldingMediator(
OverstyringIgangsattRiver(this),
EgenAnsattløsning.EgenAnsattRiver(this),
Vergemålløsning.VergemålRiver(this),
Fullmaktløsning.FullmaktRiver(this),
ÅpneGosysOppgaverløsning.ÅpneGosysOppgaverRiver(this),
Risikovurderingløsning.V2River(this),
Inntektløsning.InntektRiver(this),
Expand Down Expand Up @@ -303,7 +309,10 @@ internal class MeldingMediator(
flyttEventuelleAvviksvarsler(godkjenningsbehov.vedtaksperiodeId(), godkjenningsbehov.skjæringstidspunkt)
}

generasjonRepository.brukVedtaksperiode(godkjenningsbehov.fødselsnummer(), godkjenningsbehov.vedtaksperiodeId()) { vedtaksperiode ->
generasjonRepository.brukVedtaksperiode(
godkjenningsbehov.fødselsnummer(),
godkjenningsbehov.vedtaksperiodeId()
) { vedtaksperiode ->
vedtaksperiode.mottaBehandlingsinformasjon(
godkjenningsbehov.tags,
godkjenningsbehov.spleisBehandlingId,
Expand Down Expand Up @@ -357,7 +366,11 @@ internal class MeldingMediator(
?: return commandContext.avbryt(commandContextDao, oppgaveEndret.id)
oppgaveEndret.oppgavedataForAutomatisering(oppgavedata)
personRepository.brukPersonHvisFinnes(fødselsnummer) {
iverksett(kommandofabrikk.gosysOppgaveEndret(fødselsnummer, oppgaveEndret, this), oppgaveEndret.id, commandContext)
iverksett(
kommandofabrikk.gosysOppgaveEndret(fødselsnummer, oppgaveEndret, this),
oppgaveEndret.id,
commandContext
)
}
}

Expand Down Expand Up @@ -611,10 +624,25 @@ internal class MeldingMediator(
try {
when (melding) {
is GosysOppgaveEndret -> gosysOppgaveEndret(melding.fødselsnummer(), melding, commandContext)
is TilbakedateringBehandlet -> tilbakedateringBehandlet(melding.fødselsnummer(), melding, commandContext)
is TilbakedateringBehandlet -> tilbakedateringBehandlet(
melding.fødselsnummer(),
melding,
commandContext
)

is SøknadSendt -> iverksett(kommandofabrikk.søknadSendt(melding), melding.id, commandContext)
is Godkjenningsbehov -> iverksett(kommandofabrikk.godkjenningsbehov(melding), melding.id, commandContext)
is Saksbehandlerløsning -> iverksett(kommandofabrikk.utbetalingsgodkjenning(melding), melding.id, commandContext)
is Godkjenningsbehov -> iverksett(
kommandofabrikk.godkjenningsbehov(melding),
melding.id,
commandContext
)

is Saksbehandlerløsning -> iverksett(
kommandofabrikk.utbetalingsgodkjenning(melding),
melding.id,
commandContext
)

else -> throw IllegalArgumentException("Personhendelse må håndteres")
}
utgåendeMeldingerMediator.publiserOppsamledeMeldinger(melding, messageContext)
Expand All @@ -637,7 +665,10 @@ internal class MeldingMediator(
if (commandContext.utfør(commandContextDao, hendelseId, command)) {
val kjøretid = commandContextDao.tidsbrukForContext(contextId)
metrikker(command.name, kjøretid, contextId)
logg.info("Kommando(er) for ${command.name} er utført ferdig. Det tok ca {}ms å kjøre hele kommandokjeden", kjøretid)
logg.info(
"Kommando(er) for ${command.name} er utført ferdig. Det tok ca {}ms å kjøre hele kommandokjeden",
kjøretid
)
} else {
logg.info("${command.name} er suspendert")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package no.nav.helse.mediator.meldinger.løsninger

import no.nav.helse.mediator.MeldingMediator
import no.nav.helse.mediator.SpesialistRiver
import no.nav.helse.modell.vergemal.VergemålDao
import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.MessageContext
import no.nav.helse.rapids_rivers.River
Expand All @@ -13,15 +12,8 @@ import java.time.LocalDate
import java.util.UUID

internal class Fullmaktløsning(
private valdselsnummer: String,
val harFullmakt: Boolean,
) {
private val log = LoggerFactory.getLogger(Fullmaktløsning::class.java)

internal fun lagre(vergemålDao: VergemålDao) {
log.info("Lagrer ennå ikke fullmakt")
}

internal class FullmaktRiver(
private val meldingMediator: MeldingMediator,
) : SpesialistRiver {
Expand Down Expand Up @@ -51,7 +43,6 @@ internal class Fullmaktløsning(
sikkerLogg.info("Mottok melding Fullmakt:\n{}", packet.toJson())
val contextId = UUID.fromString(packet["contextId"].asText())
val hendelseId = UUID.fromString(packet["hendelseId"].asText())
val fødselsnummer = packet["fødselsnummer"].asText()

val= LocalDate.now()
val harFullmakt = packet["@løsning"].filter { fullmaktNode ->
Expand All @@ -62,7 +53,6 @@ internal class Fullmaktløsning(
}.isNotEmpty()

val fullmaktløsning = Fullmaktløsning(
fødselsnummer = fødselsnummer,
harFullmakt = harFullmakt,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package no.nav.helse.mediator.meldinger.løsninger
import no.nav.helse.mediator.MeldingMediator
import no.nav.helse.mediator.SpesialistRiver
import no.nav.helse.modell.vergemal.Vergemål
import no.nav.helse.modell.vergemal.VergemålDao
import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.MessageContext
import no.nav.helse.rapids_rivers.River
Expand All @@ -12,13 +11,8 @@ import org.slf4j.LoggerFactory
import java.util.UUID

internal class Vergemålløsning(
private valdselsnummer: String,
val vergemål: Vergemål,
) {
internal fun lagre(vergemålDao: VergemålDao) {
vergemålDao.lagre(fødselsnummer, vergemål)
}

internal class VergemålRiver(
private val meldingMediator: MeldingMediator,
) : SpesialistRiver {
Expand All @@ -44,7 +38,6 @@ internal class Vergemålløsning(
sikkerLogg.info("Mottok melding Vergemål:\n{}", packet.toJson())
val contextId = UUID.fromString(packet["contextId"].asText())
val hendelseId = UUID.fromString(packet["hendelseId"].asText())
val fødselsnummer = packet["fødselsnummer"].asText()

val vergemålNode = packet["@løsning.Vergemål"]
val harVergemål = !vergemålNode["vergemål"].isEmpty
Expand All @@ -60,7 +53,6 @@ internal class Vergemålløsning(

val vergemålLøsning =
Vergemålløsning(
fødselsnummer = fødselsnummer,
vergemål = vergemål,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,26 +99,27 @@ internal class Godkjenningsbehov private constructor(
skjæringstidspunkt = LocalDate.parse(packet["Godkjenning.skjæringstidspunkt"].asText()),
vedtaksperiodeId = UUID.fromString(packet["vedtaksperiodeId"].asText()),
spleisVedtaksperioder =
packet["Godkjenning.perioderMedSammeSkjæringstidspunkt"].map { periodeNode ->
SpleisVedtaksperiode(
vedtaksperiodeId = periodeNode["vedtaksperiodeId"].asUUID(),
spleisBehandlingId = periodeNode["behandlingId"].asUUID(),
fom = periodeNode["fom"].asLocalDate(),
tom = periodeNode["tom"].asLocalDate(),
skjæringstidspunkt = packet["Godkjenning.skjæringstidspunkt"].asLocalDate(),
)
},
packet["Godkjenning.perioderMedSammeSkjæringstidspunkt"].map { periodeNode ->
SpleisVedtaksperiode(
vedtaksperiodeId = periodeNode["vedtaksperiodeId"].asUUID(),
spleisBehandlingId = periodeNode["behandlingId"].asUUID(),
fom = periodeNode["fom"].asLocalDate(),
tom = periodeNode["tom"].asLocalDate(),
skjæringstidspunkt = packet["Godkjenning.skjæringstidspunkt"].asLocalDate(),
)
},
spleisBehandlingId = UUID.fromString(packet["Godkjenning.behandlingId"].asText()),
tags = packet["Godkjenning.tags"].takeUnless(JsonNode::isMissingOrNull)?.map { it.asText() }?.toList() ?: emptyList<String>(),
tags = packet["Godkjenning.tags"].takeUnless(JsonNode::isMissingOrNull)?.map { it.asText() }?.toList()
?: emptyList<String>(),
utbetalingId = UUID.fromString(packet["utbetalingId"].asText()),
periodetype = Periodetype.valueOf(packet["Godkjenning.periodetype"].asText()),
førstegangsbehandling = packet["Godkjenning.førstegangsbehandling"].asBoolean(),
utbetalingtype = Utbetalingtype.valueOf(packet["Godkjenning.utbetalingtype"].asText()),
inntektskilde = Inntektskilde.valueOf(packet["Godkjenning.inntektskilde"].asText()),
orgnummereMedRelevanteArbeidsforhold =
packet["Godkjenning.orgnummereMedRelevanteArbeidsforhold"]
.takeUnless(JsonNode::isMissingOrNull)
?.map { it.asText() } ?: emptyList(),
packet["Godkjenning.orgnummereMedRelevanteArbeidsforhold"]
.takeUnless(JsonNode::isMissingOrNull)
?.map { it.asText() } ?: emptyList(),
kanAvvises = packet["Godkjenning.kanAvvises"].asBoolean(),
json = packet.toJson(),
)
Expand All @@ -132,36 +133,36 @@ internal class Godkjenningsbehov private constructor(
periodeTom = LocalDate.parse(jsonNode.path("Godkjenning").path("periodeTom").asText()),
vedtaksperiodeId = UUID.fromString(jsonNode.path("vedtaksperiodeId").asText()),
spleisVedtaksperioder =
jsonNode.path("Godkjenning").path("perioderMedSammeSkjæringstidspunkt").map { periodeNode ->
SpleisVedtaksperiode(
vedtaksperiodeId = periodeNode["vedtaksperiodeId"].asUUID(),
spleisBehandlingId = periodeNode["behandlingId"].asUUID(),
fom = periodeNode["fom"].asLocalDate(),
tom = periodeNode["tom"].asLocalDate(),
skjæringstidspunkt = jsonNode.path("Godkjenning").path("skjæringstidspunkt").asLocalDate(),
)
},
jsonNode.path("Godkjenning").path("perioderMedSammeSkjæringstidspunkt").map { periodeNode ->
SpleisVedtaksperiode(
vedtaksperiodeId = periodeNode["vedtaksperiodeId"].asUUID(),
spleisBehandlingId = periodeNode["behandlingId"].asUUID(),
fom = periodeNode["fom"].asLocalDate(),
tom = periodeNode["tom"].asLocalDate(),
skjæringstidspunkt = jsonNode.path("Godkjenning").path("skjæringstidspunkt").asLocalDate(),
)
},
spleisBehandlingId = UUID.fromString(jsonNode.path("Godkjenning").path("behandlingId").asText()),
tags =
jsonNode
.path("Godkjenning")
.path("tags")
.takeUnless(JsonNode::isMissingOrNull)
?.map {
it.asText()
}?.toList() ?: emptyList<String>(),
jsonNode
.path("Godkjenning")
.path("tags")
.takeUnless(JsonNode::isMissingOrNull)
?.map {
it.asText()
}?.toList() ?: emptyList<String>(),
utbetalingId = UUID.fromString(jsonNode.path("utbetalingId").asText()),
skjæringstidspunkt = LocalDate.parse(jsonNode.path("Godkjenning").path("skjæringstidspunkt").asText()),
periodetype = Periodetype.valueOf(jsonNode.path("Godkjenning").path("periodetype").asText()),
førstegangsbehandling = jsonNode.path("Godkjenning").path("førstegangsbehandling").asBoolean(),
utbetalingtype = Utbetalingtype.valueOf(jsonNode.path("Godkjenning").path("utbetalingtype").asText()),
inntektskilde = Inntektskilde.valueOf(jsonNode.path("Godkjenning").path("inntektskilde").asText()),
orgnummereMedRelevanteArbeidsforhold =
jsonNode
.path("Godkjenning")
.path("orgnummereMedRelevanteArbeidsforhold")
.takeUnless(JsonNode::isMissingOrNull)
?.map { it.asText() } ?: emptyList(),
jsonNode
.path("Godkjenning")
.path("orgnummereMedRelevanteArbeidsforhold")
.takeUnless(JsonNode::isMissingOrNull)
?.map { it.asText() } ?: emptyList(),
kanAvvises = jsonNode.path("Godkjenning").path("kanAvvises").asBoolean(),
json = jsonNode.toString(),
)
Expand Down Expand Up @@ -248,6 +249,7 @@ internal class GodkjenningsbehovCommand(
),
VurderVergemålOgFullmakt(
hendelseId = id,
fødselsnummer = fødselsnummer,
vergemålDao = vergemålDao,
vedtaksperiodeId = vedtaksperiodeId,
sykefraværstilfelle = sykefraværstilfelle,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ class VergemålDao(val dataSource: DataSource) {
:har_vergemal,
:har_fremtidsfullmakter,
:har_fullmakter,
:vergemal_oppdatert,
:fullmakt_oppdatert
:oppdatert,
:oppdatert
)
ON CONFLICT (person_ref)
DO UPDATE SET
har_vergemal = :har_vergemal,
har_fremtidsfullmakter = :har_fremtidsfullmakter,
har_fullmakter = :har_fullmakter,
vergemål_oppdatert = :vergemal_oppdatert,
fullmakt_oppdatert = :fullmakt_oppdatert
vergemål_oppdatert = :oppdatert,
fullmakt_oppdatert = :oppdatert
"""
sessionOf(dataSource).use { session ->
session.run(
Expand All @@ -43,10 +43,9 @@ class VergemålDao(val dataSource: DataSource) {
mapOf(
"fodselsnummer" to fødselsnummer.toLong(),
"har_vergemal" to vergemål.harVergemål,
"har_fremtidsfullmakter" to vergemål.harFullmakter,
"har_fremtidsfullmakter" to vergemål.harFremtidsfullmakter,
"har_fullmakter" to vergemål.harFullmakter,
"vergemal_oppdatert" to LocalDateTime.now(),
"fullmakt_oppdatert" to LocalDateTime.now(),
"oppdatert" to LocalDateTime.now(),
),
).asExecute,
)
Expand Down Expand Up @@ -80,4 +79,34 @@ class VergemålDao(val dataSource: DataSource) {
)
}
}

fun harFullmakt(fødselsnummer: String): Boolean? {
@Language("PostgreSQL")
val query = """
SELECT har_vergemal, har_fremtidsfullmakter, har_fullmakter
FROM vergemal v
INNER JOIN person p on p.id = v.person_ref
WHERE p.fodselsnummer = :fodselsnummer
"""
return sessionOf(dataSource).use { session ->
session.run(
queryOf(
query,
mapOf(
"fodselsnummer" to fødselsnummer.toLong(),
),
)
.map { row ->
Vergemål(
row.boolean("har_vergemal"),
row.boolean("har_fremtidsfullmakter"),
row.boolean("har_fullmakter"),
).let {
it.harFullmakter || it.harFremtidsfullmakter
}
}
.asSingle,
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import java.util.UUID

internal class VurderVergemålOgFullmakt(
private val hendelseId: UUID,
private valdselsnummer: String,
private val vergemålDao: VergemålDao,
private val vedtaksperiodeId: UUID,
private val sykefraværstilfelle: Sykefraværstilfelle,
Expand All @@ -27,7 +28,7 @@ internal class VurderVergemålOgFullmakt(
return false
}

løsning.lagre(vergemålDao)
vergemålDao.lagre(fødselsnummer, løsning.vergemål)

if (løsning.harVergemål()) {
logg.info("Legger til varsel om vergemål på vedtaksperiode $vedtaksperiodeId")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test


class VergemålDaoTest: DatabaseIntegrationTest() {
class VergemålDaoTest : DatabaseIntegrationTest() {

@BeforeEach
fun setup() {
Expand All @@ -18,6 +18,20 @@ class VergemålDaoTest: DatabaseIntegrationTest() {
fun `lagre og les ut vergemål`() {
vergemålDao.lagre(FNR, Vergemål(harVergemål = true, harFremtidsfullmakter = false, harFullmakter = false))
assertEquals(true, vergemålDao.harVergemål(FNR))
vergemålDao.lagre(FNR, Vergemål(harVergemål = false, harFremtidsfullmakter = false, harFullmakter = false))
assertEquals(false, vergemålDao.harVergemål(FNR))
}

@Test
fun `lagre og les ut fullmakter`() {
vergemålDao.lagre(FNR, Vergemål(harVergemål = false, harFremtidsfullmakter = false, harFullmakter = false))
assertEquals(false, vergemålDao.harFullmakt(FNR))
vergemålDao.lagre(FNR, Vergemål(harVergemål = false, harFremtidsfullmakter = false, harFullmakter = true))
assertEquals(true, vergemålDao.harFullmakt(FNR))
vergemålDao.lagre(FNR, Vergemål(harVergemål = false, harFremtidsfullmakter = true, harFullmakter = false))
assertEquals(true, vergemålDao.harFullmakt(FNR))
vergemålDao.lagre(FNR, Vergemål(harVergemål = false, harFremtidsfullmakter = true, harFullmakter = true))
assertEquals(true, vergemålDao.harFullmakt(FNR))
}

@Test
Expand Down
Loading

0 comments on commit f61b1d8

Please sign in to comment.