Skip to content

Commit

Permalink
♻️ VurderÅpenGosysoppgave får skjæringstidspunkt fra sykefraværstilfelle
Browse files Browse the repository at this point in the history
  • Loading branch information
chsko committed Aug 19, 2024
1 parent 8b969ce commit fb4db6b
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 96 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ internal class Kommandofabrikk(
åpneGosysOppgaverDao = åpneGosysOppgaverDao,
oppgaveDao = oppgaveDao,
oppgaveService = oppgaveService,
generasjonRepository = generasjonRepository,
godkjenningMediator = godkjenningMediator,
spleisBehandlingId = vedtaksperiode.gjeldendeBehandlingId,
organisasjonsnummer = vedtaksperiode.organisasjonsnummer(),
Expand Down Expand Up @@ -372,7 +371,6 @@ internal class Kommandofabrikk(
spleisBehandlingId = hendelse.spleisBehandlingId,
avviksvurderingId = hendelse.avviksvurderingId,
vilkårsgrunnlagId = hendelse.vilkårsgrunnlagId,
spleisVedtaksperioder = hendelse.spleisVedtaksperioder,
periodetype = hendelse.periodetype,
inntektskilde = hendelse.inntektskilde,
førstegangsbehandling = hendelse.førstegangsbehandling,
Expand Down Expand Up @@ -401,12 +399,12 @@ internal class Kommandofabrikk(
avviksvurderingDao = avviksvurderingDao,
snapshotClient = snapshotClient,
oppgaveService = oppgaveService,
generasjonRepository = generasjonRepository,
godkjenningMediator = godkjenningMediator,
totrinnsvurderingMediator = totrinnsvurderingMediator,
json = hendelse.toJson(),
person = person,
spleisVedtaksperioder = hendelse.spleisVedtaksperioder,
tags = tags,
person = person,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import no.nav.helse.modell.oppgave.SjekkAtOppgaveFortsattErÅpenCommand
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.GenerasjonRepository
import no.nav.helse.rapids_rivers.JsonMessage
import java.util.UUID

Expand All @@ -36,7 +35,10 @@ internal class GosysOppgaveEndret private constructor(
json = jsonNode.toString(),
)

override fun behandle(person: Person, kommandofabrikk: Kommandofabrikk) {
override fun behandle(
person: Person,
kommandofabrikk: Kommandofabrikk,
) {
kommandofabrikk.iverksettGosysOppgaveEndret(this, person)
}

Expand All @@ -57,7 +59,6 @@ internal class GosysOppgaveEndretCommand(
åpneGosysOppgaverDao: ÅpneGosysOppgaverDao,
oppgaveDao: OppgaveDao,
oppgaveService: OppgaveService,
generasjonRepository: GenerasjonRepository,
godkjenningMediator: GodkjenningMediator,
spleisBehandlingId: UUID?,
organisasjonsnummer: String,
Expand All @@ -68,7 +69,6 @@ internal class GosysOppgaveEndretCommand(
hendelseId = id,
aktørId = aktørId,
åpneGosysOppgaverDao = åpneGosysOppgaverDao,
generasjonRepository = generasjonRepository,
vedtaksperiodeId = oppgavedataForAutomatisering.vedtaksperiodeId,
sykefraværstilfelle = sykefraværstilfelle,
harTildeltOppgave = harTildeltOppgave,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@ import no.nav.helse.mediator.oppgave.OppgaveService
import no.nav.helse.modell.kommando.Command
import no.nav.helse.modell.kommando.CommandContext
import no.nav.helse.modell.sykefraværstilfelle.Sykefraværstilfelle
import no.nav.helse.modell.vedtaksperiode.GenerasjonRepository
import org.slf4j.LoggerFactory
import java.time.LocalDate
import java.time.LocalDate.now
import java.util.UUID

internal class VurderÅpenGosysoppgave(
private val hendelseId: UUID,
private val aktørId: String,
private val åpneGosysOppgaverDao: ÅpneGosysOppgaverDao,
private val generasjonRepository: GenerasjonRepository,
private val vedtaksperiodeId: UUID,
private val sykefraværstilfelle: Sykefraværstilfelle,
private val harTildeltOppgave: Boolean,
Expand Down Expand Up @@ -47,15 +44,7 @@ internal class VurderÅpenGosysoppgave(
}

private fun ikkeEldreEnn(vedtaksperiodeId: UUID): LocalDate {
val ikkeEldreEnn =
runCatching { generasjonRepository.skjæringstidspunktFor(vedtaksperiodeId) }.getOrElse {
// Det skal ikke skje at det ikke går å finne skjæringstidspunkt, men greit å være på den sikre siden
logg.warn(
"Mangler skjæringstidspunkt for {}, det er ikke forventet",
kv("vedtaksperiodeId", vedtaksperiodeId),
)
now()
}.minusYears(1)
val ikkeEldreEnn = sykefraværstilfelle.skjæringstidspunkt().minusYears(1)
logg.info(
"Sender {} for {} i behov for oppgaveinformasjon fra Gosys",
kv("ikkeEldreEnn", ikkeEldreEnn),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ import no.nav.helse.modell.kommando.OpprettSaksbehandleroppgave
import no.nav.helse.modell.kommando.PersisterInntektCommand
import no.nav.helse.modell.kommando.PersisterPeriodehistorikkCommand
import no.nav.helse.modell.kommando.PersisterVedtaksperiodetypeCommand
import no.nav.helse.modell.kommando.VurderVidereBehandlingAvGodkjenningsbehov
import no.nav.helse.modell.kommando.VurderBehovForTotrinnskontroll
import no.nav.helse.modell.kommando.VurderVidereBehandlingAvGodkjenningsbehov
import no.nav.helse.modell.overstyring.OverstyringDao
import no.nav.helse.modell.person.Person
import no.nav.helse.modell.person.PersonDao
Expand Down Expand Up @@ -97,7 +97,10 @@ internal class Godkjenningsbehov private constructor(

override fun toJson() = json

override fun behandle(person: Person, kommandofabrikk: Kommandofabrikk) {
override fun behandle(
person: Person,
kommandofabrikk: Kommandofabrikk,
) {
kommandofabrikk.iverksettGodkjenningsbehov(this, person, tags)
}

Expand All @@ -111,31 +114,32 @@ internal class Godkjenningsbehov private constructor(
skjæringstidspunkt = LocalDate.parse(packet["Godkjenning.skjæringstidspunkt"].asText()),
vedtaksperiodeId = UUID.fromString(packet["vedtaksperiodeId"].asText()),
avviksvurderingId =
packet["avviksvurderingId"].takeUnless { it.isMissingOrNull() }
?.let { UUID.fromString(it.asText()) },
packet["avviksvurderingId"].takeUnless { it.isMissingOrNull() }
?.let { UUID.fromString(it.asText()) },
vilkårsgrunnlagId = UUID.fromString(packet["Godkjenning.vilkårsgrunnlagId"].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 @@ -149,40 +153,40 @@ internal class Godkjenningsbehov private constructor(
periodeTom = LocalDate.parse(jsonNode.path("Godkjenning").path("periodeTom").asText()),
vedtaksperiodeId = UUID.fromString(jsonNode.path("vedtaksperiodeId").asText()),
avviksvurderingId =
jsonNode.path("avviksvurderingId").takeUnless { it.isMissingOrNull() }
?.let { UUID.fromString(it.asText()) },
jsonNode.path("avviksvurderingId").takeUnless { it.isMissingOrNull() }
?.let { UUID.fromString(it.asText()) },
vilkårsgrunnlagId = UUID.fromString(jsonNode.path("Godkjenning").path("vilkårsgrunnlagId").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 @@ -226,13 +230,12 @@ internal class GodkjenningsbehovCommand(
avviksvurderingDao: AvviksvurderingDao,
snapshotClient: ISnapshotClient,
oppgaveService: OppgaveService,
generasjonRepository: GenerasjonRepository,
godkjenningMediator: GodkjenningMediator,
totrinnsvurderingMediator: TotrinnsvurderingMediator,
json: String,
spleisVedtaksperioder: List<SpleisVedtaksperiode>,
tags: List<String>,
person: Person
person: Person,
) : MacroCommand() {
private val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId)
override val commands: List<Command> =
Expand All @@ -244,20 +247,20 @@ internal class GodkjenningsbehovCommand(
vedtaksperiodeId = vedtaksperiodeId,
utbetalingId = utbetalingId,
skjæringstidspunkt = skjæringstidspunkt,
tags = tags
tags = tags,
),
VurderVidereBehandlingAvGodkjenningsbehov(
meldingId = id,
utbetalingId = utbetalingId,
vedtaksperiodeId = vedtaksperiodeId,
utbetalingDao = utbetalingDao,
oppgaveDao = oppgaveDao,
vedtakDao = vedtakDao
vedtakDao = vedtakDao,
),
OpprettKoblingTilAvviksvurdering(
avviksvurderingId = avviksvurderingId,
vilkårsgrunnlagId = vilkårsgrunnlagId,
avviksvurderingDao = avviksvurderingDao
avviksvurderingDao = avviksvurderingDao,
),
OpprettKoblingTilHendelseCommand(
hendelseId = id,
Expand Down Expand Up @@ -313,7 +316,6 @@ internal class GodkjenningsbehovCommand(
hendelseId = id,
aktørId = aktørId,
åpneGosysOppgaverDao = åpneGosysOppgaverDao,
generasjonRepository = generasjonRepository,
vedtaksperiodeId = vedtaksperiodeId,
sykefraværstilfelle = sykefraværstilfelle,
harTildeltOppgave = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package no.nav.helse.modell.gosysoppgaver

import io.mockk.clearMocks
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import no.nav.helse.januar
Expand All @@ -14,7 +13,6 @@ import no.nav.helse.modell.person.vedtaksperiode.VarselStatusDto
import no.nav.helse.modell.sykefraværstilfelle.Sykefraværstilfelle
import no.nav.helse.modell.vedtaksperiode.Generasjon
import no.nav.helse.modell.vedtaksperiode.GenerasjonDto
import no.nav.helse.modell.vedtaksperiode.GenerasjonRepository
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
Expand All @@ -24,7 +22,7 @@ import java.time.LocalDate
import java.time.LocalDateTime
import java.util.UUID

internal class VurderVidereBehandlingAvklaresGosysoppgaveTest {
internal class VurderÅpenGosysoppgaveTest {
private companion object {
private const val FNR = "12345678911"
private const val AKTØR_ID = "1234567891112"
Expand All @@ -34,18 +32,17 @@ internal class VurderVidereBehandlingAvklaresGosysoppgaveTest {

private val generasjonAg1 = generasjon(VEDTAKPERIODE_ID_AG_1)
private val generasjonAg2 = generasjon(VEDTAKPERIODE_ID_AG_2)
private val sykefraværstilfelle = Sykefraværstilfelle(FNR, 1.januar, listOf(generasjonAg1, generasjonAg2), emptyList())
private val skjæringstidspunkt = LocalDate.now().minusDays(17)
private val sykefraværstilfelle = Sykefraværstilfelle(FNR, skjæringstidspunkt, listOf(generasjonAg1, generasjonAg2), emptyList())
private val dao = mockk<ÅpneGosysOppgaverDao>(relaxed = true)
private val oppgaveService = mockk<OppgaveService>(relaxed = true)

private fun command(
harTildeltOppgave: Boolean = false,
skjæringstidspunkt: LocalDate = LocalDate.now(),
) = VurderÅpenGosysoppgave(
UUID.randomUUID(),
AKTØR_ID,
dao,
mockk<GenerasjonRepository> { every { skjæringstidspunktFor(VEDTAKPERIODE_ID_AG_1) } returns skjæringstidspunkt },
VEDTAKPERIODE_ID_AG_1,
sykefraværstilfelle,
harTildeltOppgave = harTildeltOppgave,
Expand Down Expand Up @@ -78,33 +75,11 @@ internal class VurderVidereBehandlingAvklaresGosysoppgaveTest {

@Test
fun `Ber om åpne oppgaver i gosys`() {
val skjæringstidspunkt = LocalDate.now().minusDays(17)
assertFalse(command(skjæringstidspunkt = skjæringstidspunkt).execute(context))
assertFalse(command().execute(context))
assertEquals(listOf("ÅpneOppgaver"), observer.behov.keys.toList())
assertEquals(skjæringstidspunkt.minusYears(1), observer.behov["ÅpneOppgaver"]!!["ikkeEldreEnn"])
}

@Test
fun `Baserer ikkeEldreEnn på dagens dato hvis det ikke fins noen generasjon`() {
assertFalse(
VurderÅpenGosysoppgave(
UUID.randomUUID(),
AKTØR_ID,
dao,
mockk<GenerasjonRepository> {
every { skjæringstidspunktFor(VEDTAKPERIODE_ID_AG_1) } throws
IllegalStateException("testfeil")
},
VEDTAKPERIODE_ID_AG_1,
sykefraværstilfelle,
harTildeltOppgave = false,
oppgaveService = oppgaveService,
).execute(context),
)
assertEquals(listOf("ÅpneOppgaver"), observer.behov.keys.toList())
assertEquals(LocalDate.now().minusYears(1), observer.behov["ÅpneOppgaver"]!!["ikkeEldreEnn"])
}

@Test
fun `Mangler løsning ved resume`() {
assertFalse(command().resume(context))
Expand Down

0 comments on commit fb4db6b

Please sign in to comment.