Skip to content

Commit

Permalink
Tilbakekreving: Fix ErUtfylt->UnderBehandling.Utfylt
Browse files Browse the repository at this point in the history
  • Loading branch information
hestad committed Jan 8, 2024
1 parent 54cfd53 commit 6bf6c03
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ data class Attesteringshistorikk private constructor(
fun hentSisteIverksatteAttesteringOrNull(): Attestering.Iverksatt? {
return this.filterIsInstance<Attestering.Iverksatt>().singleOrNull()
}

fun erUnderkjent(): Boolean = this.any { it is Attestering.Underkjent }
}

sealed interface Attestering {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ import no.nav.su.se.bakover.domain.sak.SakService
import no.nav.su.se.bakover.domain.sak.hentTilbakekrevingsbehandling
import org.slf4j.LoggerFactory
import tilbakekreving.application.service.tilgang.TilbakekrevingsbehandlingTilgangstyringService
import tilbakekreving.domain.ErUtfylt
import tilbakekreving.domain.IverksattTilbakekrevingsbehandling
import tilbakekreving.domain.TilbakekrevingsbehandlingTilAttestering
import tilbakekreving.domain.UnderBehandling
import tilbakekreving.domain.forhåndsvarsel.VedtaksbrevTilbakekrevingsbehandlingDokumentCommand
import tilbakekreving.domain.vurdert.ForhåndsvisVedtaksbrevCommand
import tilbakekreving.domain.vurdert.KunneIkkeForhåndsviseVedtaksbrev
Expand All @@ -38,9 +37,10 @@ class ForhåndsvisVedtaksbrevTilbakekrevingsbehandlingService(
val behandling = sak.hentTilbakekrevingsbehandling(command.behandlingId)
?: return KunneIkkeForhåndsviseVedtaksbrev.FantIkkeBehandling.left()

// TODO jah: Flytt domenelogikk til domenet. Gjelder hele klassen.
val vurderingMedKrav = when (behandling) {
is TilbakekrevingsbehandlingTilAttestering -> behandling.vurderingerMedKrav
is ErUtfylt -> behandling.vurderingerMedKrav
is UnderBehandling.Utfylt -> behandling.vurderingerMedKrav
else -> return KunneIkkeForhåndsviseVedtaksbrev.UgyldigTilstand.left()
}

Expand Down Expand Up @@ -68,12 +68,10 @@ class ForhåndsvisVedtaksbrevTilbakekrevingsbehandlingService(
sakId = sak.id,
saksbehandler = when (behandling) {
is TilbakekrevingsbehandlingTilAttestering -> behandling.sendtTilAttesteringAv
is IverksattTilbakekrevingsbehandling -> behandling.forrigeSteg.sendtTilAttesteringAv
else -> command.utførtAv
},
attestant = when (behandling) {
is TilbakekrevingsbehandlingTilAttestering -> command.utførtAv
is IverksattTilbakekrevingsbehandling -> behandling.attesteringer.hentSisteIverksatteAttesteringOrNull()!!.attestant
else -> null
},
fritekst = fritekst,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ data class Tilbakekrevingsbehandlinger(
return when {
behandling.isEmpty() -> null
behandling.size == 1 -> behandling[0]
// Dette er også garantert av init
else -> throw IllegalStateException("Mer enn 1 tilbakekrevingsbehandling for unik id: $id")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ data class BrevTilbakekrevingsbehandlingHendelse(

init {
when (brevvalg) {
// TODO jah: Dette tyder på at vi bør ha en egen brevvalg-type for tilbakekreving som ikke åpner for dette valget.
is Brevvalg.SaksbehandlersValg.SkalSendeBrev.InformasjonsbrevMedFritekst ->
throw IllegalStateException("Ved tilbakekreving for sak $sakId, må brevet være av typen Vedtaksbrev. Tidligere hendelse var $tidligereHendelseId")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,24 +37,14 @@ sealed interface UnderBehandling :

override fun erÅpen() = true

override fun oppdaterNotat(
notat: NonBlankString?,
hendelseId: HendelseId,
versjon: Hendelsesversjon,
): UnderBehandling =
when (this) {
is Påbegynt -> this.copy(hendelseId = hendelseId, versjon = versjon, notat = notat)
is Utfylt -> this.copy(hendelseId = hendelseId, versjon = versjon, notat = notat)
}

/**
* Kan kun gå fra [OpprettetTilbakekrevingsbehandling] til [Påbegynt], men ikke tilbake til [OpprettetTilbakekrevingsbehandling].
* Lovelige overganger til:
* * [AvbruttTilbakekrevingsbehandling]
* * [Påbegynt]
* * [Utfylt]
*
* Forrige steg, kan bare være [OpprettetTilbakekrevingsbehandling] eller [Påbegynt]
* Forrige steg, kan bare være [OpprettetTilbakekrevingsbehandling] eller [UnderBehandling]
*/
data class Påbegynt(
val forrigeSteg: KanEndres,
Expand All @@ -67,30 +57,34 @@ sealed interface UnderBehandling :
override val erKravgrunnlagUtdatert: Boolean,
override val notat: NonBlankString?,
) : UnderBehandling, KanEndres by forrigeSteg {

override val attesteringer: Attesteringshistorikk = Attesteringshistorikk.empty()

// Behandlingen må være utfylt før man kan attestere/underkjenne.
override val erUnderkjent = false
override fun erÅpen(): Boolean = true
override val erUnderkjent = attesteringer.erUnderkjent()

init {
// TODO jah: Kan vi type oss ut av dette?
require(forrigeSteg is OpprettetTilbakekrevingsbehandling || forrigeSteg is Påbegynt || forrigeSteg is KanOppdatereKravgrunnlag)
}
override fun erÅpen(): Boolean = true

fun erVurdert(): Boolean = vurderingerMedKrav != null

override fun oppdaterNotat(
notat: NonBlankString?,
hendelseId: HendelseId,
versjon: Hendelsesversjon,
): UnderBehandling = this.copy(hendelseId = hendelseId, versjon = versjon, notat = notat)

/**
* Siden vedtaksbrevet er avhengig av månedsperiodene krever vi at månedsvurderingene er utfylt først.
* Kan vurdere å gjøre Påbegynt til sealed og dele den opp i med og uten brev.
* @throws IllegalStateException Dersom [vurderingerMedKrav] ikke er utfylt.
*/
override fun oppdaterVedtaksbrev(
vedtaksbrevvalg: Brevvalg.SaksbehandlersValg,
hendelseId: HendelseId,
versjon: Hendelsesversjon,
): Utfylt {
return if (vurderingerMedKrav == null) {
throw IllegalArgumentException("Må gjøre månedsvurderingene før man tar stilling til vedtaksbrev")
// TODO jah: Kan vurdere å gjøre Påbegynt til sealed og dele den opp i med og uten brev.
// Alternativt kan denne returnere UnderBehandling også aksepterer vi at vi at vi kan oppdatere vedtaksbrevinnholdet uten [vurderingerMedKrav]?
throw IllegalStateException("Må gjøre månedsvurderingene før man tar stilling til vedtaksbrev")
} else {
Utfylt(
forrigeSteg = this,
Expand Down Expand Up @@ -147,9 +141,9 @@ sealed interface UnderBehandling :
override val versjon: Hendelsesversjon,
override val vurderingerMedKrav: VurderingerMedKrav,
override val vedtaksbrevvalg: Brevvalg.SaksbehandlersValg,
override val attesteringer: Attesteringshistorikk,
override val forhåndsvarselsInfo: List<ForhåndsvarselMetaInfo>,
override val notat: NonBlankString?,
override val attesteringer: Attesteringshistorikk = forrigeSteg.attesteringer,
override val forhåndsvarselsInfo: List<ForhåndsvarselMetaInfo> = forrigeSteg.forhåndsvarselsInfo,
override val notat: NonBlankString? = forrigeSteg.notat,
) : UnderBehandling, KanEndres, UnderBehandlingEllerTilAttestering by forrigeSteg, ErUtfylt {

constructor(
Expand All @@ -162,12 +156,16 @@ sealed interface UnderBehandling :
versjon = versjon,
vurderingerMedKrav = forrigeSteg.vurderingerMedKrav,
vedtaksbrevvalg = forrigeSteg.vedtaksbrevvalg,
attesteringer = forrigeSteg.attesteringer,
forhåndsvarselsInfo = forrigeSteg.forhåndsvarselsInfo,
notat = forrigeSteg.notat,
)

override val erUnderkjent = attesteringer.isNotEmpty()
override val erUnderkjent = attesteringer.erUnderkjent()

override fun oppdaterNotat(
notat: NonBlankString?,
hendelseId: HendelseId,
versjon: Hendelsesversjon,
): UnderBehandling = this.copy(hendelseId = hendelseId, versjon = versjon, notat = notat)

override fun leggTilVurderinger(
nedsvurderinger: VurderingerMedKrav,
hendelseId: HendelseId,
Expand Down

0 comments on commit 6bf6c03

Please sign in to comment.