Skip to content

Commit

Permalink
✨ Vedtaksbygging starter i Person og delegeres til Vedtaksperiode
Browse files Browse the repository at this point in the history
* Går ikke lenger via Sykefraværstilfelle og da trenger ikke lenger
Sykefraværstilfelle observers heller
* River/Message-klasse trenger ikke lenger fiske tags og avslag
fra databasen, dette får vedtaket fra generasjonen
  • Loading branch information
chsko committed Aug 20, 2024
1 parent 4101342 commit 80d1664
Show file tree
Hide file tree
Showing 26 changed files with 168 additions and 192 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import io.ktor.server.routing.routing
import no.nav.helse.DataSourceBuilder
import no.nav.helse.Gruppekontroll
import no.nav.helse.Tilgangsgrupper
import no.nav.helse.db.AvslagDao
import no.nav.helse.db.AvviksvurderingDao
import no.nav.helse.db.BehandlingsstatistikkDao
import no.nav.helse.db.ReservasjonDao
Expand Down Expand Up @@ -120,7 +119,6 @@ internal class SpesialistApp(
private val meldingDao = MeldingDao(dataSource)
private val dokumentDao = DokumentDao(dataSource)
private val generasjonDao = GenerasjonDao(dataSource)
private val avslagDao = AvslagDao(dataSource)
private valVentApiDao = PåVentApiDao(dataSource)
private val avviksvurderingDao = AvviksvurderingDao(dataSource)
private val automatiseringDao = AutomatiseringDao(dataSource)
Expand Down Expand Up @@ -287,8 +285,6 @@ internal class SpesialistApp(
kommandofabrikk = kommandofabrikk,
avviksvurderingDao = avviksvurderingDao,
stansAutomatiskBehandlingMediator = stansAutomatiskBehandlingMediator,
generasjonDao = generasjonDao,
avslagDao = avslagDao,
)
saksbehandlerMediator =
SaksbehandlerMediator(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ internal class Kommandofabrikk(
val harTildeltOppgave = tildelingDao.tildelingForOppgave(oppgaveDataForAutomatisering.oppgaveId) != null
val vedtaksperiodeId = oppgaveDataForAutomatisering.vedtaksperiodeId
val vedtaksperiode =
checkNotNull(person.vedtaksperiode(vedtaksperiodeId)) {
checkNotNull(person.vedtaksperiodeOrNull(vedtaksperiodeId)) {
"Forventer ikke at denne funksjonen kalles når det ikke finnes en vedtaksperiode med vedtaksperiodeId=$vedtaksperiodeId"
}

Expand Down Expand Up @@ -186,7 +186,7 @@ internal class Kommandofabrikk(
val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId)
val utbetaling = utbetalingDao.hentUtbetaling(oppgaveDataForAutomatisering.utbetalingId)
val vedtaksperiode =
checkNotNull(person.vedtaksperiode(vedtaksperiodeId)) {
checkNotNull(person.vedtaksperiodeOrNull(vedtaksperiodeId)) {
"Forventer ikke at denne funksjonen kalles når det ikke finnes en vedtaksperiode med vedtaksperiodeId=$vedtaksperiodeId"
}

Expand Down Expand Up @@ -327,7 +327,7 @@ internal class Kommandofabrikk(
val oppgaveId = melding.oppgaveId
val fødselsnummer = melding.fødselsnummer()
val vedtaksperiodeId = oppgaveDao.finnVedtaksperiodeId(oppgaveId)
val spleisBehandlingId = person.vedtaksperiode(vedtaksperiodeId)?.gjeldendeBehandlingId
val spleisBehandlingId = person.vedtaksperiodeOrNull(vedtaksperiodeId)?.gjeldendeBehandlingId
val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId)
val utbetaling = utbetalingDao.utbetalingFor(oppgaveId)
return UtbetalingsgodkjenningCommand(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import SøknadSendtArbeidsledigRiver
import com.fasterxml.jackson.databind.JsonNode
import no.nav.helse.MetrikkRiver
import no.nav.helse.bootstrap.Environment
import no.nav.helse.db.AvslagDao
import no.nav.helse.db.AvviksvurderingDao
import no.nav.helse.mediator.meldinger.AvsluttetMedVedtakRiver
import no.nav.helse.mediator.meldinger.AvsluttetUtenVedtakRiver
Expand Down Expand Up @@ -60,7 +59,6 @@ import no.nav.helse.modell.stoppautomatiskbehandling.StansAutomatiskBehandlingMe
import no.nav.helse.modell.stoppautomatiskbehandling.StoppknappÅrsak
import no.nav.helse.modell.varsel.VarselRepository
import no.nav.helse.modell.varsel.Varseldefinisjon
import no.nav.helse.modell.vedtaksperiode.GenerasjonDao
import no.nav.helse.modell.vedtaksperiode.vedtak.VedtakFattet
import no.nav.helse.modell.vilkårsprøving.AvviksvurderingDto
import no.nav.helse.objectMapper
Expand Down Expand Up @@ -91,8 +89,6 @@ internal class MeldingMediator(
avviksvurderingDao: AvviksvurderingDao,
private val varselRepository: VarselRepository = VarselRepository(dataSource),
private val stansAutomatiskBehandlingMediator: StansAutomatiskBehandlingMediator,
generasjonDao: GenerasjonDao,
avslagDao: AvslagDao,
private val personRepository: PersonRepository = PersonRepository(dataSource),
) : Personhåndterer {
private companion object {
Expand Down Expand Up @@ -132,11 +128,13 @@ 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 Down Expand Up @@ -179,7 +177,7 @@ internal class MeldingMediator(
VarseldefinisjonRiver(this),
VedtaksperiodeNyUtbetalingRiver(this),
MetrikkRiver(),
AvsluttetMedVedtakRiver(this, avviksvurderingDao, generasjonDao, avslagDao),
AvsluttetMedVedtakRiver(this, avviksvurderingDao),
AvsluttetUtenVedtakRiver(this),
MidnattRiver(this),
BehandlingOpprettetRiver(this),
Expand Down Expand Up @@ -357,13 +355,16 @@ internal class MeldingMediator(
sikkerlogg.error("alvorlig feil: ${err.message}\n\t$message", err, err.printStackTrace())
}

internal fun mottaSøknadSendt(melding: SøknadSendt, messageContext: MessageContext) {
internal fun mottaSøknadSendt(
melding: SøknadSendt,
messageContext: MessageContext,
) {
val meldingnavn = requireNotNull(melding::class.simpleName)
withMDC(
mutableMapOf(
"meldingId" to melding.id.toString(),
"meldingnavn" to meldingnavn,
)
),
) {
logg.info("Melding SøknadSendt mottatt")
sikkerlogg.info("Melding SøknadSendt mottatt:\n${melding.toJson()}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package no.nav.helse.mediator.meldinger

import no.nav.helse.db.AvslagDao
import no.nav.helse.db.AvviksvurderingDao
import no.nav.helse.mediator.MeldingMediator
import no.nav.helse.mediator.SpesialistRiver
import no.nav.helse.mediator.meldinger.hendelser.AvsluttetMedVedtakMessage
import no.nav.helse.modell.vedtaksperiode.GenerasjonDao
import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.MessageContext
import no.nav.helse.rapids_rivers.MessageProblems
Expand All @@ -16,8 +14,6 @@ import org.slf4j.LoggerFactory
internal class AvsluttetMedVedtakRiver(
private val mediator: MeldingMediator,
private val avviksvurderingDao: AvviksvurderingDao,
private val generasjonDao: GenerasjonDao,
private val avslagDao: AvslagDao,
) : SpesialistRiver {
override fun validations() =
River.PacketValidation {
Expand Down Expand Up @@ -71,7 +67,7 @@ internal class AvsluttetMedVedtakRiver(
packet: JsonMessage,
context: MessageContext,
) {
mediator.mottaMelding(AvsluttetMedVedtakMessage(packet, avviksvurderingDao, generasjonDao, avslagDao), context)
mediator.mottaMelding(AvsluttetMedVedtakMessage(packet, avviksvurderingDao), context)
}

private companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,31 @@ package no.nav.helse.mediator.meldinger.hendelser

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.treeToValue
import no.nav.helse.db.AvslagDao
import no.nav.helse.db.AvviksvurderingDao
import no.nav.helse.mediator.Kommandofabrikk
import no.nav.helse.mediator.asUUID
import no.nav.helse.mediator.meldinger.Vedtaksperiodemelding
import no.nav.helse.modell.person.Person
import no.nav.helse.modell.sykefraværstilfelle.Sykefraværstilfelle
import no.nav.helse.modell.vedtak.Avslag
import no.nav.helse.modell.vedtak.Faktatype
import no.nav.helse.modell.vedtak.Sykepengegrunnlagsfakta
import no.nav.helse.modell.vedtaksperiode.GenerasjonDao
import no.nav.helse.modell.vedtaksperiode.vedtak.AvsluttetMedVedtak
import no.nav.helse.modell.vilkårsprøving.Avviksvurdering.Companion.finnRiktigAvviksvurdering
import no.nav.helse.modell.vilkårsprøving.Avviksvurdering.Companion.gjenopprett
import no.nav.helse.modell.vilkårsprøving.InnrapportertInntektDto
import no.nav.helse.rapids_rivers.JsonMessage
import no.nav.helse.rapids_rivers.asLocalDate
import no.nav.helse.rapids_rivers.asLocalDateTime
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.util.UUID

internal class AvsluttetMedVedtakMessage(
private val packet: JsonMessage,
private val avviksvurderingDao: AvviksvurderingDao,
private val generasjonDao: GenerasjonDao,
private val avslagDao: AvslagDao,
) : Vedtaksperiodemelding {
private val fødselsnummer = packet["fødselsnummer"].asText()
private val aktørId = packet["aktørId"].asText()
private val fom = packet["fom"].asLocalDate()
private val tom = packet["tom"].asLocalDate()
private val vedtakFattetTidspunkt = packet["vedtakFattetTidspunkt"].asLocalDateTime()
private val vedtaksperiodeId = UUID.fromString(packet["vedtaksperiodeId"].asText())
private val spleisBehandlingId = UUID.fromString(packet["behandlingId"].asText())
private val organisasjonsnummer = packet["organisasjonsnummer"].asText()
private val utbetalingId = packet["utbetalingId"].asUUID()
private val skjæringstidspunkt = packet["skjæringstidspunkt"].asLocalDate()
private val hendelser = packet["hendelser"].map { it.asUUID() }
private val sykepengegrunnlag = packet["sykepengegrunnlag"].asDouble()
Expand All @@ -50,17 +38,16 @@ internal class AvsluttetMedVedtakMessage(
private val begrensning = packet["begrensning"].asText()
private val inntekt = packet["inntekt"].asDouble()
private val sykepengegrunnlagsfakta = sykepengegrunnlagsfakta(packet, faktatype(packet))
private val sikkerLogg: Logger = LoggerFactory.getLogger("tjenestekall")

internal fun skjæringstidspunkt() = skjæringstidspunkt

override fun fødselsnummer(): String = fødselsnummer

override fun vedtaksperiodeId(): UUID = vedtaksperiodeId

override fun behandle(person: Person, kommandofabrikk: Kommandofabrikk) {
val sykefraværstilfelle = person.sykefraværstilfelle(vedtaksperiodeId)
sendInnTil(sykefraværstilfelle)
override fun behandle(
person: Person,
kommandofabrikk: Kommandofabrikk,
) {
person.fattVedtak(avsluttetMedVedtak)
}

override val id: UUID = packet["@id"].asUUID()
Expand All @@ -69,40 +56,17 @@ internal class AvsluttetMedVedtakMessage(

private val avsluttetMedVedtak get() =
AvsluttetMedVedtak(
fødselsnummer = fødselsnummer,
aktørId = aktørId,
organisasjonsnummer = organisasjonsnummer,
vedtaksperiodeId = vedtaksperiodeId,
spleisBehandlingId = spleisBehandlingId,
utbetalingId = utbetalingId,
skjæringstidspunkt = skjæringstidspunkt,
hendelser = hendelser,
sykepengegrunnlag = sykepengegrunnlag,
grunnlagForSykepengegrunnlag = grunnlagForSykepengegrunnlag,
grunnlagForSykepengegrunnlagPerArbeidsgiver = grunnlagForSykepengegrunnlagPerArbeidsgiver,
begrensning = begrensning,
inntekt = inntekt,
sykepengegrunnlagsfakta = sykepengegrunnlagsfakta,
fom = fom,
tom = tom,
vedtakFattetTidspunkt = vedtakFattetTidspunkt,
)

private fun sendInnTil(sykefraværstilfelle: Sykefraværstilfelle) {
val tags: List<String> = generasjonDao.finnTagsFor(spleisBehandlingId) ?: emptyList()
if (tags.isEmpty()) {
sikkerLogg.error(
"Ingen tags funnet for spleisBehandlingId: $spleisBehandlingId på vedtaksperiodeId: $vedtaksperiodeId, json: ${toJson()}",
)
}

val generasjonsId = generasjonDao.finnSisteGenerasjonIdFor(vedtaksperiodeId)
if (generasjonsId == null) sikkerLogg.error("Finner ikke generasjonsId for vedtaksperiodeId: $vedtaksperiodeId, json: ${toJson()}")
val avslag: Avslag? = if (generasjonsId != null) avslagDao.finnAvslag(vedtaksperiodeId, generasjonsId) else null

sykefraværstilfelle.håndter(avsluttetMedVedtak, tags, avslag)
}

private fun faktatype(packet: JsonMessage): Faktatype {
return when (val fastsattString = packet["sykepengegrunnlagsfakta.fastsatt"].asText()) {
"EtterSkjønn" -> Faktatype.ETTER_SKJØNN
Expand Down
Loading

0 comments on commit 80d1664

Please sign in to comment.