From 0e73d3f8f3f0a21854f74f7325bb4945d6b6e7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20B=C3=BClow=20Skovborg?= Date: Mon, 19 Aug 2024 12:37:29 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20TilbakedateringBehandlet?= =?UTF-8?q?=20benytter=20ny=20flyt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../no/nav/helse/mediator/Kommandofabrikk.kt | 13 ++-- .../no/nav/helse/mediator/MeldingMediator.kt | 60 ------------------- .../TilbakedateringBehandletRiver.kt | 2 +- .../kommando/TilbakedateringBehandlet.kt | 20 ++++--- ...3\270knadsperiodenOverlapperMedOppgave.kt" | 15 +++++ .../nav/helse/mediator/MeldingMediatorTest.kt | 3 - .../MetrikkerFraMeldingMediatorTest.kt | 1 - .../TilbakedateringBehandletRiverTest.kt | 2 +- 8 files changed, 37 insertions(+), 79 deletions(-) create mode 100644 "spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/VurderOmS\303\270knadsperiodenOverlapperMedOppgave.kt" diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt index 9fc125f16..5c641136e 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/Kommandofabrikk.kt @@ -224,12 +224,11 @@ internal class Kommandofabrikk( ) } - fun tilbakedateringGodkjent( - fødselsnummer: String, + private fun tilbakedateringGodkjent( melding: TilbakedateringBehandlet, person: Person, + oppgaveDataForAutomatisering: OppgaveDataForAutomatisering ): TilbakedateringGodkjentCommand { - val oppgaveDataForAutomatisering = melding.oppgavedataForAutomatisering val vedtaksperiodeId = oppgaveDataForAutomatisering.vedtaksperiodeId val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId) val utbetaling = utbetalingDao.hentUtbetaling(oppgaveDataForAutomatisering.utbetalingId) @@ -239,7 +238,7 @@ internal class Kommandofabrikk( } return TilbakedateringGodkjentCommand( - fødselsnummer = fødselsnummer, + fødselsnummer = melding.fødselsnummer(), sykefraværstilfelle = sykefraværstilfelle, utbetaling = utbetaling, automatisering = automatisering, @@ -248,6 +247,7 @@ internal class Kommandofabrikk( godkjenningMediator = godkjenningMediator, spleisBehandlingId = vedtaksperiode.gjeldendeBehandlingId, organisasjonsnummer = vedtaksperiode.organisasjonsnummer(), + søknadsperioder = melding.perioder ) } @@ -514,6 +514,11 @@ internal class Kommandofabrikk( iverksett(gosysOppgaveEndret(melding, person, oppgaveDataForAutomatisering), melding.id) } + internal fun iverksettTilbakedateringBehandlet(melding: TilbakedateringBehandlet, person: Person) { + val oppgaveDataForAutomatisering = finnOppgavedata(melding.fødselsnummer()) ?: return + iverksett(tilbakedateringGodkjent(melding, person, oppgaveDataForAutomatisering), melding.id) + } + private fun nyContext(meldingId: UUID) = CommandContext(UUID.randomUUID()).apply { opprett(commandContextDao, meldingId) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt index 38542ebf7..91a304bbb 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/MeldingMediator.kt @@ -47,16 +47,13 @@ import no.nav.helse.mediator.meldinger.løsninger.SaksbehandlerløsningRiver import no.nav.helse.mediator.meldinger.løsninger.Vergemålløsning import no.nav.helse.mediator.meldinger.løsninger.ÅpneGosysOppgaverløsning import no.nav.helse.mediator.meldinger.påminnelser.KommandokjedePåminnelseRiver -import no.nav.helse.mediator.oppgave.OppgaveDao import no.nav.helse.modell.CommandContextDao import no.nav.helse.modell.MeldingDao import no.nav.helse.modell.MeldingDuplikatkontrollDao import no.nav.helse.modell.VedtakDao import no.nav.helse.modell.dokument.DokumentDao -import no.nav.helse.modell.gosysoppgaver.OppgaveDataForAutomatisering import no.nav.helse.modell.kommando.Command import no.nav.helse.modell.kommando.CommandContext -import no.nav.helse.modell.kommando.TilbakedateringBehandlet import no.nav.helse.modell.person.AdressebeskyttelseEndretRiver import no.nav.helse.modell.person.OppdaterPersonsnapshot import no.nav.helse.modell.person.PersonDao @@ -91,7 +88,6 @@ internal interface SpesialistRiver : River.PacketListener { internal class MeldingMediator( private val dataSource: DataSource, private val rapidsConnection: RapidsConnection, - private val oppgaveDao: OppgaveDao = OppgaveDao(dataSource), private val vedtakDao: VedtakDao = VedtakDao(dataSource), private val personDao: PersonDao = PersonDao(dataSource), private val commandContextDao: CommandContextDao = CommandContextDao(dataSource), @@ -288,56 +284,6 @@ internal class MeldingMediator( kommandofabrikk.avviksvurdering(avviksvurdering) } - private fun finnOppgavedata(fødselsnummer: String): OppgaveDataForAutomatisering? { - return oppgaveDao.finnOppgaveId(fødselsnummer)?.let { oppgaveId -> - sikkerlogg.info("Fant en oppgave for {}: {}", fødselsnummer, oppgaveId) - val oppgaveDataForAutomatisering = oppgaveDao.oppgaveDataForAutomatisering(oppgaveId) - - if (oppgaveDataForAutomatisering == null) { - sikkerlogg.info("Fant ikke oppgavedata for {} og {}", fødselsnummer, oppgaveId) - return null - } else { - sikkerlogg.info( - "Har aktiv saksbehandleroppgave og oppgavedata for fnr $fødselsnummer og vedtaksperiodeId ${oppgaveDataForAutomatisering.vedtaksperiodeId}", - ) - return oppgaveDataForAutomatisering - } - } ?: kotlin.run { - sikkerlogg.info("Ingen åpne oppgaver i Speil for {}", fødselsnummer) - null - } - } - - private fun tilbakedateringBehandlet( - fødselsnummer: String, - tilbakedateringBehandlet: TilbakedateringBehandlet, - commandContext: CommandContext, - ) { - personRepository.brukPersonHvisFinnes(fødselsnummer) { - behandleTilbakedateringBehandlet(tilbakedateringBehandlet.perioder) - } - val oppgaveDataForAutomatisering = - finnOppgavedata(fødselsnummer) - ?: return commandContext.avbryt(commandContextDao, tilbakedateringBehandlet.id) - - if (!oppgaveDataForAutomatisering.periodeOverlapperMed(tilbakedateringBehandlet.perioder)) { - sikkerlogg.info( - "Ingen av periodene i sykmeldingen er innenfor vedtaksperiodens fom og tom, for tilbakedateringen {} og {}", - fødselsnummer, - oppgaveDataForAutomatisering.oppgaveId, - ) - return - } - tilbakedateringBehandlet.oppgavedataForAutomatisering(oppgaveDataForAutomatisering) - personRepository.brukPersonHvisFinnes(fødselsnummer) { - iverksett( - command = kommandofabrikk.tilbakedateringGodkjent(fødselsnummer, tilbakedateringBehandlet, this), - hendelseId = tilbakedateringBehandlet.id, - commandContext = commandContext, - ) - } - } - fun stansAutomatiskBehandling( fødselsnummer: String, status: String, @@ -557,12 +503,6 @@ internal class MeldingMediator( val hendelsenavn = melding::class.simpleName ?: "ukjent hendelse" try { when (melding) { - is TilbakedateringBehandlet -> tilbakedateringBehandlet( - melding.fødselsnummer(), - melding, - commandContext - ) - is SøknadSendt -> iverksett(kommandofabrikk.søknadSendt(melding), melding.id, commandContext) diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiver.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiver.kt index 6733c8973..dc8e4c0f5 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiver.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiver.kt @@ -49,6 +49,6 @@ internal class TilbakedateringBehandletRiver( StructuredArguments.keyValue("hendelse", packet.toJson()), ) - mediator.håndter(TilbakedateringBehandlet(packet), context) + mediator.mottaMelding(TilbakedateringBehandlet(packet), context) } } diff --git a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/TilbakedateringBehandlet.kt b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/TilbakedateringBehandlet.kt index 006a02350..7bba5bca9 100644 --- a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/TilbakedateringBehandlet.kt +++ b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/TilbakedateringBehandlet.kt @@ -2,12 +2,14 @@ package no.nav.helse.modell.kommando import com.fasterxml.jackson.databind.JsonNode import no.nav.helse.mediator.GodkjenningMediator -import no.nav.helse.mediator.meldinger.PersonmeldingOld +import no.nav.helse.mediator.Kommandofabrikk +import no.nav.helse.mediator.meldinger.Personmelding import no.nav.helse.mediator.oppgave.OppgaveService import no.nav.helse.modell.automatisering.Automatisering import no.nav.helse.modell.automatisering.AutomatiseringForEksisterendeOppgaveCommand import no.nav.helse.modell.automatisering.SettTidligereAutomatiseringInaktivCommand import no.nav.helse.modell.gosysoppgaver.OppgaveDataForAutomatisering +import no.nav.helse.modell.person.Person import no.nav.helse.modell.sykefraværstilfelle.Sykefraværstilfelle import no.nav.helse.modell.utbetaling.Utbetaling import no.nav.helse.modell.vedtaksperiode.Periode @@ -20,7 +22,7 @@ internal class TilbakedateringBehandlet private constructor( private val fødselsnummer: String, val perioder: List, private val json: String, -) : PersonmeldingOld { +) : Personmelding { internal constructor(packet: JsonMessage) : this( id = UUID.fromString(packet["@id"].asText()), fødselsnummer = packet["fødselsnummer"].asText(), @@ -40,16 +42,14 @@ internal class TilbakedateringBehandlet private constructor( json = jsonNode.toString(), ) + override fun behandle(person: Person, kommandofabrikk: Kommandofabrikk) { + person.behandleTilbakedateringBehandlet(perioder) + kommandofabrikk.iverksettTilbakedateringBehandlet(this, person) + } + override fun fødselsnummer() = fødselsnummer override fun toJson(): String = json - - internal lateinit var oppgavedataForAutomatisering: OppgaveDataForAutomatisering - private set - - internal fun oppgavedataForAutomatisering(oppgavedataForAutomatisering: OppgaveDataForAutomatisering) { - this.oppgavedataForAutomatisering = oppgavedataForAutomatisering - } } internal class TilbakedateringGodkjentCommand( @@ -62,9 +62,11 @@ internal class TilbakedateringGodkjentCommand( godkjenningMediator: GodkjenningMediator, spleisBehandlingId: UUID?, organisasjonsnummer: String, + søknadsperioder: List ) : MacroCommand() { override val commands: List = listOf( + VurderOmSøknadsperiodenOverlapperMedOppgave(oppgaveDataForAutomatisering, søknadsperioder), ikkesuspenderendeCommand("fjernTilbakedatertEgenskap") { oppgaveService.fjernTilbakedatert(oppgaveDataForAutomatisering.vedtaksperiodeId) }, diff --git "a/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/VurderOmS\303\270knadsperiodenOverlapperMedOppgave.kt" "b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/VurderOmS\303\270knadsperiodenOverlapperMedOppgave.kt" new file mode 100644 index 000000000..4f71c0b5b --- /dev/null +++ "b/spesialist-selve/src/main/kotlin/no/nav/helse/modell/kommando/VurderOmS\303\270knadsperiodenOverlapperMedOppgave.kt" @@ -0,0 +1,15 @@ +package no.nav.helse.modell.kommando + +import no.nav.helse.modell.gosysoppgaver.OppgaveDataForAutomatisering +import no.nav.helse.modell.kommando.CommandContext.Companion.ferdigstill +import no.nav.helse.modell.vedtaksperiode.Periode + +internal class VurderOmSøknadsperiodenOverlapperMedOppgave( + private val oppgaveDataForAutomatisering: OppgaveDataForAutomatisering, + private val søknadsperioder: List +): Command { + override fun execute(context: CommandContext): Boolean { + if (!oppgaveDataForAutomatisering.periodeOverlapperMed(søknadsperioder)) return ferdigstill(context) + return true + } +} diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MeldingMediatorTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MeldingMediatorTest.kt index e2384f5c3..147c5db15 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MeldingMediatorTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MeldingMediatorTest.kt @@ -6,7 +6,6 @@ import kotliquery.sessionOf import no.nav.helse.AbstractDatabaseTest import no.nav.helse.db.AvslagDao import no.nav.helse.db.AvviksvurderingDao -import no.nav.helse.mediator.oppgave.OppgaveDao import no.nav.helse.modell.stoppautomatiskbehandling.StansAutomatiskBehandlingMediator import no.nav.helse.modell.varsel.Varseldefinisjon import no.nav.helse.modell.varsel.Varselkode @@ -22,7 +21,6 @@ import java.util.UUID internal class MeldingMediatorTest : AbstractDatabaseTest() { private val testRapid = TestRapid() - private val oppgaveDao = mockk(relaxed = true) private val avviksvurderingDao = mockk() private val generasjonDao = mockk() private val avslagDao = mockk() @@ -33,7 +31,6 @@ internal class MeldingMediatorTest : AbstractDatabaseTest() { MeldingMediator( dataSource = dataSource, rapidsConnection = testRapid, - oppgaveDao = oppgaveDao, kommandofabrikk = kommandofabrikk, avviksvurderingDao = avviksvurderingDao, stansAutomatiskBehandlingMediator = stansAutomatiskBehandlingMediator, diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MetrikkerFraMeldingMediatorTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MetrikkerFraMeldingMediatorTest.kt index ba8e78ca5..43ddc980f 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MetrikkerFraMeldingMediatorTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/MetrikkerFraMeldingMediatorTest.kt @@ -24,7 +24,6 @@ internal class MetrikkerFraMeldingMediatorTest : AbstractDatabaseTest() { MeldingMediator( dataSource = dataSource, rapidsConnection = testRapid, - oppgaveDao = mockk(relaxed = true), kommandofabrikk = kommandofabrikk, avviksvurderingDao = mockk(), stansAutomatiskBehandlingMediator = mockk(relaxed = true), diff --git a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiverTest.kt b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiverTest.kt index 329bbe457..14b265cd7 100644 --- a/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiverTest.kt +++ b/spesialist-selve/src/test/kotlin/no/nav/helse/mediator/meldinger/TilbakedateringBehandletRiverTest.kt @@ -25,7 +25,7 @@ internal class TilbakedateringBehandletRiverTest { fun `Leser tilbakedatering behandlet`() { mocks() testRapid.sendTestMessage(event()) - verify(exactly = 1) { mediator.håndter(any(), any()) } + verify(exactly = 1) { mediator.mottaMelding(any(), any()) } } private fun mocks(