Skip to content

Commit

Permalink
Utvid tilbakekrevingsbehandling->vurderinger objektet.
Browse files Browse the repository at this point in the history
Dette skal inneholde nok data til å vise i frontend/generere brev/sende vedtak til oppdrag
  • Loading branch information
hestad committed Nov 24, 2023
1 parent d537817 commit 9ffc57c
Show file tree
Hide file tree
Showing 37 changed files with 542 additions and 195 deletions.
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
package no.nav.su.se.bakover.domain.oppdrag.tilbakekreving.behandling

import arrow.core.Either
import arrow.core.left
import arrow.core.right
import no.nav.su.se.bakover.domain.Sak
import org.slf4j.LoggerFactory
import tilbakekreving.domain.BrevTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.KanLeggeTilBrev
import tilbakekreving.domain.KanVurdere
import tilbakekreving.domain.MånedsvurderingerTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.Tilbakekrevingsbehandling
import tilbakekreving.domain.TilbakekrevingsbehandlingId
import tilbakekreving.domain.UnderBehandling
import tilbakekreving.domain.VurdertTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.leggTilBrevtekst
import tilbakekreving.domain.leggTilVurdering
import tilbakekreving.domain.vurdert.KunneIkkeVurdereTilbakekrevingsbehandling
import tilbakekreving.domain.vurdert.OppdaterBrevtekstCommand
import tilbakekreving.domain.vurdert.VurderCommand
import java.time.Clock

private val log = LoggerFactory.getLogger("VurderTilbakekrevingsbehandling.kt")

fun Sak.vurderTilbakekrevingsbehandling(
command: VurderCommand,
clock: Clock,
): Pair<MånedsvurderingerTilbakekrevingsbehandlingHendelse, UnderBehandling> {
return (this.hentTilbakekrevingsbehandling(command.behandlingsId) as? KanVurdere)?.let { behandling ->
behandling.leggTilVurdering(
command = command,
tidligereHendelsesId = behandling.hendelseId,
nesteVersjon = this.versjon.inc(),
clock = clock,
)
}
): Either<KunneIkkeVurdereTilbakekrevingsbehandling, Pair<VurdertTilbakekrevingsbehandlingHendelse, UnderBehandling>> {
val behandling = (this.hentTilbakekrevingsbehandling(command.behandlingsId) as? KanVurdere)
?: throw IllegalStateException("Tilbakekrevingsbehandling ${command.behandlingsId} enten fantes ikke eller var ikke i KanVurdere tilstanden. Sak id $id, saksnummer $saksnummer")

if (this.uteståendeKravgrunnlag != behandling.kravgrunnlag) {
log.info("Kunne ikke sende tilbakekrevingsbehandling $id til attestering, kravgrunnlaget på behandlingen (eksternKravgrunnlagId ${behandling.kravgrunnlag.eksternKravgrunnlagId}) er ikke det samme som det som er på saken (eksternKravgrunnlagId ${this.uteståendeKravgrunnlag?.eksternKravgrunnlagId}). For sakId ${this.id}")
return KunneIkkeVurdereTilbakekrevingsbehandling.KravgrunnlagetHarEndretSeg.left()
}
return behandling.leggTilVurdering(
command = command,
tidligereHendelsesId = behandling.hendelseId,
nesteVersjon = this.versjon.inc(),
clock = clock,
).right()
}

fun Sak.oppdaterVedtaksbrev(
Expand Down
85 changes: 59 additions & 26 deletions test-common/src/main/kotlin/TilbakekrevingTestData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,21 @@ import no.nav.su.se.bakover.common.tid.periode.januar
import no.nav.su.se.bakover.hendelse.domain.DefaultHendelseMetadata
import no.nav.su.se.bakover.hendelse.domain.HendelseId
import no.nav.su.se.bakover.hendelse.domain.Hendelsesversjon
import no.nav.su.se.bakover.test.kravgrunnlag.kravgrunnlag
import tilbakekreving.domain.AvbruttHendelse
import tilbakekreving.domain.BrevTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.ForhåndsvarsleTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.IverksattHendelse
import tilbakekreving.domain.MånedsvurderingerTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.OpprettetTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.TilAttesteringHendelse
import tilbakekreving.domain.TilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.TilbakekrevingsbehandlingId
import tilbakekreving.domain.VurdertTilbakekrevingsbehandlingHendelse
import tilbakekreving.domain.kravgrunnlag.Kravgrunnlag
import tilbakekreving.domain.kravgrunnlag.Kravgrunnlagstatus
import tilbakekreving.domain.vurdert.Månedsvurdering
import tilbakekreving.domain.vurdert.Vurdering
import tilbakekreving.domain.vurdert.Vurderinger
import tilbakekreving.domain.vurdert.VurderingerMedKrav
import økonomi.domain.simulering.Simulering
import java.math.BigDecimal
import java.math.RoundingMode
Expand Down Expand Up @@ -139,7 +140,7 @@ fun nyForhåndsvarsletTilbakekrevingsbehandlingHendelse(
* @param behandlingId Ignoreres desom [forrigeHendelse] sendes inn.
* @param kravgrunnlagPåSakHendelseId Ignoreres desom [forrigeHendelse] sendes inn.
* @param dokumentId Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderinger Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderingerMedKrav Ignoreres desom [forrigeHendelse] sendes inn.
*/
fun nyVurdertTilbakekrevingsbehandlingHendelse(
sakId: UUID = no.nav.su.se.bakover.test.sakId,
Expand All @@ -158,15 +159,23 @@ fun nyVurdertTilbakekrevingsbehandlingHendelse(
hendelsesTidspunkt: Tidspunkt = fixedTidspunkt,
versjon: Hendelsesversjon = forrigeHendelse.versjon.inc(),
meta: DefaultHendelseMetadata = DefaultHendelseMetadata.tom(),
kravgrunnlag: Kravgrunnlag = kravgrunnlag(
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
behandler = utførtAv.toString(),
),
vurderinger: Vurderinger = Vurderinger(
vurderinger = nonEmptyListOf(
Månedsvurdering(
måned = januar(2021),
nonEmptyListOf(
Vurderinger.Periodevurdering(
periode = januar(2021),
vurdering = Vurdering.SkalTilbakekreve,
),
),
),
): MånedsvurderingerTilbakekrevingsbehandlingHendelse = MånedsvurderingerTilbakekrevingsbehandlingHendelse(
vurderingerMedKrav: VurderingerMedKrav = VurderingerMedKrav.utledFra(
vurderinger,
kravgrunnlag,
),
): VurdertTilbakekrevingsbehandlingHendelse = VurdertTilbakekrevingsbehandlingHendelse(
hendelseId = hendelseId,
sakId = forrigeHendelse.sakId,
hendelsestidspunkt = hendelsesTidspunkt,
Expand All @@ -175,36 +184,44 @@ fun nyVurdertTilbakekrevingsbehandlingHendelse(
id = forrigeHendelse.id,
utførtAv = utførtAv,
tidligereHendelseId = forrigeHendelse.hendelseId,
vurderinger = vurderinger,
vurderingerMedKrav = vurderingerMedKrav,
)

/**
* @param sakId Ignoreres desom [forrigeHendelse] sendes inn.
* @param behandlingId Ignoreres desom [forrigeHendelse] sendes inn.
* @param kravgrunnlagPåSakHendelseId Ignoreres desom [forrigeHendelse] sendes inn.
* @param dokumentId Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderinger Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderingerMedKrav Ignoreres desom [forrigeHendelse] sendes inn.
*/
fun nyOppdaterVedtaksbrevTilbakekrevingsbehandlingHendelse(
sakId: UUID = no.nav.su.se.bakover.test.sakId,
behandlingId: TilbakekrevingsbehandlingId = TilbakekrevingsbehandlingId.generer(),
kravgrunnlagPåSakHendelseId: HendelseId,
dokumentId: UUID = UUID.randomUUID(),
utførtAv: NavIdentBruker.Saksbehandler = saksbehandler,
kravgrunnlag: Kravgrunnlag = kravgrunnlag(
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
behandler = utførtAv.toString(),
),
vurderinger: Vurderinger = Vurderinger(
vurderinger = nonEmptyListOf(
Månedsvurdering(
måned = januar(2021),
nonEmptyListOf(
Vurderinger.Periodevurdering(
periode = januar(2021),
vurdering = Vurdering.SkalTilbakekreve,
),
),
),
utførtAv: NavIdentBruker.Saksbehandler = saksbehandler,
vurderingerMedKrav: VurderingerMedKrav = VurderingerMedKrav.utledFra(
vurderinger,
kravgrunnlag,
),
forrigeHendelse: TilbakekrevingsbehandlingHendelse = nyVurdertTilbakekrevingsbehandlingHendelse(
sakId = sakId,
behandlingId = behandlingId,
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
dokumentId = dokumentId,
vurderinger = vurderinger,
vurderingerMedKrav = vurderingerMedKrav,
utførtAv = utførtAv,
),
hendelseId: HendelseId = HendelseId.generer(),
Expand All @@ -231,32 +248,40 @@ fun nyOppdaterVedtaksbrevTilbakekrevingsbehandlingHendelse(
* @param behandlingId Ignoreres desom [forrigeHendelse] sendes inn.
* @param kravgrunnlagPåSakHendelseId Ignoreres desom [forrigeHendelse] sendes inn.
* @param dokumentId Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderinger Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderingerMedKrav Ignoreres desom [forrigeHendelse] sendes inn.
* @param brevvalg Ignoreres desom [forrigeHendelse] sendes inn.
*/
fun nyTilbakekrevingsbehandlingTilAttesteringHendelse(
sakId: UUID = no.nav.su.se.bakover.test.sakId,
behandlingId: TilbakekrevingsbehandlingId = TilbakekrevingsbehandlingId.generer(),
kravgrunnlagPåSakHendelseId: HendelseId,
dokumentId: UUID = UUID.randomUUID(),
utførtAv: NavIdentBruker.Saksbehandler = saksbehandler,
kravgrunnlag: Kravgrunnlag = kravgrunnlag(
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
behandler = utførtAv.toString(),
),
vurderinger: Vurderinger = Vurderinger(
vurderinger = nonEmptyListOf(
Månedsvurdering(
måned = januar(2021),
nonEmptyListOf(
Vurderinger.Periodevurdering(
periode = januar(2021),
vurdering = Vurdering.SkalTilbakekreve,
),
),
),
vurderingerMedKrav: VurderingerMedKrav = VurderingerMedKrav.utledFra(
vurderinger,
kravgrunnlag,
),
brevvalg: Brevvalg.SaksbehandlersValg = Brevvalg.SaksbehandlersValg.SkalSendeBrev.Vedtaksbrev.MedFritekst(
fritekst = "fritekst",
),
utførtAv: NavIdentBruker.Saksbehandler = saksbehandler,
forrigeHendelse: TilbakekrevingsbehandlingHendelse = nyOppdaterVedtaksbrevTilbakekrevingsbehandlingHendelse(
sakId = sakId,
behandlingId = behandlingId,
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
dokumentId = dokumentId,
vurderinger = vurderinger,
vurderingerMedKrav = vurderingerMedKrav,
utførtAv = utførtAv,
brevvalg = brevvalg,
),
Expand All @@ -280,33 +305,41 @@ fun nyTilbakekrevingsbehandlingTilAttesteringHendelse(
* @param behandlingId Ignoreres desom [forrigeHendelse] sendes inn.
* @param kravgrunnlagPåSakHendelseId Ignoreres desom [forrigeHendelse] sendes inn.
* @param dokumentId Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderinger Ignoreres desom [forrigeHendelse] sendes inn.
* @param vurderingerMedKrav Ignoreres desom [forrigeHendelse] sendes inn.
* @param brevvalg Ignoreres desom [forrigeHendelse] sendes inn.
*/
fun nyIverksattTilbakekrevingsbehandlingHendelse(
sakId: UUID = no.nav.su.se.bakover.test.sakId,
behandlingId: TilbakekrevingsbehandlingId = TilbakekrevingsbehandlingId.generer(),
kravgrunnlagPåSakHendelseId: HendelseId,
dokumentId: UUID = UUID.randomUUID(),
utførtAv: NavIdentBruker.Attestant = attestant,
kravgrunnlag: Kravgrunnlag = kravgrunnlag(
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
behandler = utførtAv.toString(),
),
vurderinger: Vurderinger = Vurderinger(
vurderinger = nonEmptyListOf(
Månedsvurdering(
måned = januar(2021),
nonEmptyListOf(
Vurderinger.Periodevurdering(
periode = januar(2021),
vurdering = Vurdering.SkalTilbakekreve,
),
),
),
vurderingerMedKrav: VurderingerMedKrav = VurderingerMedKrav.utledFra(
vurderinger,
kravgrunnlag,
),
brevvalg: Brevvalg.SaksbehandlersValg = Brevvalg.SaksbehandlersValg.SkalSendeBrev.Vedtaksbrev.MedFritekst(
fritekst = "fritekst",
),
utførtAv: NavIdentBruker.Attestant = attestant,
sendtTilAttesteringUtførtAv: NavIdentBruker.Saksbehandler = saksbehandler,
forrigeHendelse: TilbakekrevingsbehandlingHendelse = nyTilbakekrevingsbehandlingTilAttesteringHendelse(
sakId = sakId,
behandlingId = behandlingId,
kravgrunnlagPåSakHendelseId = kravgrunnlagPåSakHendelseId,
dokumentId = dokumentId,
vurderinger = vurderinger,
vurderingerMedKrav = vurderingerMedKrav,
utførtAv = sendtTilAttesteringUtførtAv,
brevvalg = brevvalg,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package tilbakekreving.application.service.vurder
import arrow.core.Either
import arrow.core.getOrElse
import arrow.core.left
import arrow.core.right
import no.nav.su.se.bakover.domain.oppdrag.tilbakekreving.behandling.vurderTilbakekrevingsbehandling
import no.nav.su.se.bakover.domain.sak.SakService
import org.slf4j.LoggerFactory
Expand Down Expand Up @@ -37,10 +36,9 @@ class MånedsvurderingerTilbakekrevingsbehandlingService(
if (sak.versjon != command.klientensSisteSaksversjon) {
log.info("Vurdering av tilbakekreving - Sakens versjon (${sak.versjon}) er ulik saksbehandlers versjon. Command: $command")
}
return sak.vurderTilbakekrevingsbehandling(command, clock).let { pair ->
pair.second.right().onRight {
tilbakekrevingsbehandlingRepo.lagre(pair.first)
}
return sak.vurderTilbakekrevingsbehandling(command, clock).map { pair ->
tilbakekrevingsbehandlingRepo.lagre(pair.first)
pair.second
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import no.nav.su.se.bakover.hendelse.domain.HendelseId
import no.nav.su.se.bakover.hendelse.domain.Hendelsesversjon
import tilbakekreving.domain.forhåndsvarsel.ForhåndsvarselMetaInfo
import tilbakekreving.domain.kravgrunnlag.Kravgrunnlag
import tilbakekreving.domain.vurdert.Vurderinger
import tilbakekreving.domain.vurdert.VurderingerMedKrav
import java.util.UUID

/**
Expand All @@ -26,7 +26,7 @@ sealed interface Tilbakekrevingsbehandling {
val opprettetAv: NavIdentBruker.Saksbehandler
val kravgrunnlag: Kravgrunnlag
val erKravgrunnlagUtdatert: Boolean
val månedsvurderinger: Vurderinger?
val vurderingerMedKrav: VurderingerMedKrav?
val vedtaksbrevvalg: Brevvalg.SaksbehandlersValg?
val attesteringer: Attesteringshistorikk
val versjon: Hendelsesversjon
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ data class TilbakekrevingsbehandlingHendelser private constructor(
)
}

is MånedsvurderingerTilbakekrevingsbehandlingHendelse -> acc.plus(
is VurdertTilbakekrevingsbehandlingHendelse -> acc.plus(
hendelseId to hendelse.applyToState(acc[hendelse.tidligereHendelseId]!!),
).minus(hendelse.tidligereHendelseId)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,24 @@ data class Kravgrunnlag(
/** En eller flere perioder kravgrunnlaget knyttes mot. Antar at det finnes minst ett element i lista. */
val grunnlagsperioder: List<Grunnlagsperiode>,
) {

init {
grunnlagsperioder.map { it.periode }.let {
require(it.sorted() == it) {
"Kravgrunnlagsperiodene må være sortert."
}
it.zipWithNext { a, b ->
require(!a.overlapper(b)) {
"Perioder kan ikke overlappe."
}
}
}
}

fun forPeriode(periode: DatoIntervall): Grunnlagsperiode? {
return grunnlagsperioder.find { it.periode == periode }
}

val summertBetaltSkattForYtelsesgruppen by lazy { grunnlagsperioder.sumOf { it.betaltSkattForYtelsesgruppen } }
val summertBruttoTidligereUtbetalt by lazy { grunnlagsperioder.sumOf { it.bruttoTidligereUtbetalt } }
val summertBruttoNyUtbetaling by lazy { grunnlagsperioder.sumOf { it.bruttoNyUtbetaling } }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ data class OppdatertKravgrunnlagPåTilbakekrevingHendelse(
forrigeSteg = behandling,
hendelseId = hendelseId,
versjon = versjon,
månedsvurderinger = behandling.månedsvurderinger,
vurderingerMedKrav = behandling.vurderingerMedKrav,
forhåndsvarselsInfo = behandling.forhåndsvarselsInfo,
vedtaksbrevvalg = behandling.vedtaksbrevvalg,
kravgrunnlag = kravgrunnlag,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import no.nav.su.se.bakover.hendelse.domain.HendelseId
import no.nav.su.se.bakover.hendelse.domain.Hendelsesversjon
import tilbakekreving.domain.forhåndsvarsel.ForhåndsvarselMetaInfo
import tilbakekreving.domain.kravgrunnlag.Kravgrunnlag
import tilbakekreving.domain.vurdert.Vurderinger
import tilbakekreving.domain.vurdert.VurderingerMedKrav
import java.util.UUID

data class OpprettetTilbakekrevingsbehandling(
Expand Down Expand Up @@ -39,26 +39,26 @@ data class OpprettetTilbakekrevingsbehandling(
forrigeSteg = this,
hendelseId = hendelseId,
versjon = versjon,
månedsvurderinger = this.månedsvurderinger,
vurderingerMedKrav = this.vurderingerMedKrav,
forhåndsvarselsInfo = listOf(ForhåndsvarselMetaInfo(dokumentId, hendelsesTidspunkt)),
kravgrunnlag = kravgrunnlag,
erKravgrunnlagUtdatert = this.erKravgrunnlagUtdatert,
)

override fun leggTilVurderinger(
nedsvurderinger: Vurderinger,
nedsvurderinger: VurderingerMedKrav,
hendelseId: HendelseId,
versjon: Hendelsesversjon,
) = UnderBehandling.Påbegynt(
forrigeSteg = this,
hendelseId = hendelseId,
månedsvurderinger = månedsvurderinger,
vurderingerMedKrav = månedsvurderinger,
forhåndsvarselsInfo = listOf(),
versjon = versjon,
kravgrunnlag = kravgrunnlag,
erKravgrunnlagUtdatert = this.erKravgrunnlagUtdatert,
)

override val månedsvurderinger: Vurderinger? = null
override val vurderingerMedKrav: VurderingerMedKrav? = null
override val vedtaksbrevvalg: Brevvalg.SaksbehandlersValg? = null
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ data class UnderkjentHendelse(
kommentar = begrunnelse,
),
),
månedsvurderinger = behandling.månedsvurderinger,
vurderingerMedKrav = behandling.vurderingerMedKrav,
vedtaksbrevvalg = behandling.vedtaksbrevvalg,
forhåndsvarselsInfo = behandling.forhåndsvarselsInfo,
)
Expand Down
Loading

0 comments on commit 9ffc57c

Please sign in to comment.