Skip to content

Commit

Permalink
forbedrer feiltypene for utbetaling
Browse files Browse the repository at this point in the history
  • Loading branch information
ramnav990 committed Apr 19, 2024
1 parent f79bea4 commit c9a95db
Show file tree
Hide file tree
Showing 25 changed files with 203 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ data object Feilresponser {
)

val kunneIkkeUtbetale = InternalServerError.errorJson(
"Kunne ikke utføre utbetaling",
"kunne_ikke_utbetale",
"Kunne ikke sende til oppdrag",
"kunne_ikke_sende_til_oppdrag",
)

val attestantOgSaksbehandlerKanIkkeVæreSammePerson = Forbidden.errorJson(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import no.nav.su.se.bakover.domain.vedtak.VedtakInnvilgetRegulering
import no.nav.su.se.bakover.domain.vedtak.fromRegulering
import vedtak.domain.Vedtak
import vedtak.domain.VedtakSomKanRevurderes
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -19,7 +20,7 @@ interface ReguleringRunType {
val sessionFactory: SessionFactory
val lagreRegulering: (Regulering, TransactionContext) -> Unit
val lagreVedtak: (Vedtak, TransactionContext) -> Unit
val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>
val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>
val notifyObservers: (VedtakInnvilgetRegulering) -> Unit
}

Expand All @@ -29,7 +30,7 @@ sealed interface LiveRun : ReguleringRunType {
override val sessionFactory: SessionFactory,
override val lagreRegulering: (Regulering, TransactionContext) -> Unit,
override val lagreVedtak: (Vedtak, TransactionContext) -> Unit,
override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit,
) : LiveRun {
fun kjørSideffekter(regulering: OpprettetRegulering) {
Expand All @@ -43,7 +44,7 @@ sealed interface LiveRun : ReguleringRunType {
override val sessionFactory: SessionFactory,
override val lagreRegulering: (Regulering, TransactionContext) -> Unit,
override val lagreVedtak: (Vedtak, TransactionContext) -> Unit,
override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit,
) : LiveRun {
fun kjørSideffekter(
Expand All @@ -58,7 +59,7 @@ sealed interface LiveRun : ReguleringRunType {
).getOrElse {
throw IverksettTransactionException(
"Kunne ikke opprette utbetaling. Underliggende feil:$it.",
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(it),
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeKlargjøreUtbetaling(it),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering
import no.nav.su.se.bakover.domain.statistikk.StatistikkEvent
import no.nav.su.se.bakover.domain.statistikk.StatistikkEventObserver
import no.nav.su.se.bakover.domain.vedtak.Revurderingsvedtak
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -24,7 +25,7 @@ interface IverksettRevurderingResponse<out T : Revurderingsvedtak> {
*/
fun ferdigstillIverksettelseITransaksjon(
sessionFactory: SessionFactory,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
lagreVedtak: (vedtak: T, tx: TransactionContext) -> Unit,
lagreRevurdering: (revurdering: IverksattRevurdering, tx: TransactionContext) -> Unit,
annullerKontrollsamtale: (sakId: UUID, tx: TransactionContext) -> Unit,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
package no.nav.su.se.bakover.domain.revurdering.iverksett

data class IverksettTransactionException(
override val message: String,
val feil: KunneIkkeFerdigstilleIverksettelsestransaksjon,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ package no.nav.su.se.bakover.domain.revurdering.iverksett
import økonomi.domain.utbetaling.UtbetalingFeilet

sealed interface KunneIkkeFerdigstilleIverksettelsestransaksjon {
data class KunneIkkeUtbetale(val utbetalingFeilet: UtbetalingFeilet) :
KunneIkkeFerdigstilleIverksettelsestransaksjon
data class KunneIkkeLeggeUtbetalingPåKø(
val utbetalingFeilet: UtbetalingFeilet,
) : KunneIkkeFerdigstilleIverksettelsestransaksjon

data class KunneIkkeKlargjøreUtbetaling(
val underliggende: økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling,
) : KunneIkkeFerdigstilleIverksettelsestransaksjon
data class UkjentFeil(val throwable: Throwable) : KunneIkkeFerdigstilleIverksettelsestransaksjon
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import no.nav.su.se.bakover.domain.statistikk.StatistikkEventObserver
import no.nav.su.se.bakover.domain.statistikk.notify
import no.nav.su.se.bakover.domain.vedtak.VedtakInnvilgetRevurdering
import org.slf4j.LoggerFactory
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -36,7 +37,7 @@ data class IverksettInnvilgetRevurderingResponse(

override fun ferdigstillIverksettelseITransaksjon(
sessionFactory: SessionFactory,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
lagreVedtak: (vedtak: VedtakInnvilgetRevurdering, tx: TransactionContext) -> Unit,
lagreRevurdering: (revurdering: IverksattRevurdering, tx: TransactionContext) -> Unit,
annullerKontrollsamtale: (sakId: UUID, tx: TransactionContext) -> Unit,
Expand All @@ -56,7 +57,7 @@ data class IverksettInnvilgetRevurderingResponse(
).getOrElse {
throw IverksettTransactionException(
"Kunne ikke opprette utbetaling. Underliggende feil:$it.",
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(it),
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeKlargjøreUtbetaling(it),
)
}
lagreVedtak(vedtak, tx)
Expand All @@ -66,7 +67,7 @@ data class IverksettInnvilgetRevurderingResponse(
.getOrElse { feil ->
throw IverksettTransactionException(
"Kunne ikke publisere utbetaling på køen. Underliggende feil: $feil.",
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(feil),
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeLeggeUtbetalingPåKø(feil),
)
}
statistikkObservers().notify(statistikkhendelser)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import no.nav.su.se.bakover.domain.statistikk.StatistikkEventObserver
import no.nav.su.se.bakover.domain.statistikk.notify
import no.nav.su.se.bakover.domain.vedtak.Opphørsvedtak
import org.slf4j.LoggerFactory
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -35,7 +36,7 @@ data class IverksettOpphørtRevurderingMedUtbetalingResponse(

override fun ferdigstillIverksettelseITransaksjon(
sessionFactory: SessionFactory,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
lagreVedtak: (vedtak: Opphørsvedtak, tx: TransactionContext) -> Unit,
lagreRevurdering: (revurdering: IverksattRevurdering, tx: TransactionContext) -> Unit,
annullerKontrollsamtale: (sakId: UUID, tx: TransactionContext) -> Unit,
Expand All @@ -55,7 +56,7 @@ data class IverksettOpphørtRevurderingMedUtbetalingResponse(
).getOrElse {
throw IverksettTransactionException(
"Kunne ikke opprette utbetaling. Underliggende feil:$it.",
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(it),
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeKlargjøreUtbetaling(it),
)
}
lagreVedtak(vedtak, tx)
Expand All @@ -67,12 +68,12 @@ data class IverksettOpphørtRevurderingMedUtbetalingResponse(
.getOrElse { feil ->
throw IverksettTransactionException(
"Kunne ikke publisere utbetaling på køen. Underliggende feil: $feil.",
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(feil),
KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeLeggeUtbetalingPåKø(feil),
)
}
statistikkObservers().notify(statistikkhendelser)

vedtak.behandling
}.also {
statistikkObservers().notify(statistikkhendelser)
}
}.mapLeft {
when (it) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import no.nav.su.se.bakover.domain.vedtak.VedtakInnvilgetSøknadsbehandling
import no.nav.su.se.bakover.domain.vedtak.VedtakIverksattSøknadsbehandling
import no.nav.su.se.bakover.oppgave.domain.KunneIkkeLukkeOppgave
import vedtak.domain.Vedtak
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -21,7 +22,7 @@ interface IverksattSøknadsbehandlingResponse<T : IverksattSøknadsbehandling> {
val søknadsbehandling: T

fun ferdigstillIverksettelseITransaksjon(
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
sessionFactory: SessionFactory,
lagreSøknadsbehandling: (T, TransactionContext) -> Unit,
lagreVedtak: (Vedtak, TransactionContext) -> Unit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import no.nav.su.se.bakover.domain.vedtak.VedtakIverksattSøknadsbehandling
import no.nav.su.se.bakover.oppgave.domain.KunneIkkeLukkeOppgave
import org.slf4j.LoggerFactory
import vedtak.domain.Vedtak
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -37,7 +38,7 @@ data class IverksattAvslåttSøknadsbehandlingResponse(
* Merk at for avslag sender vi ingenting til oppdrag, slik at vi ikke kan basere oss på asynk-jobben når vi mottar kvittering.
*/
override fun ferdigstillIverksettelseITransaksjon(
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
sessionFactory: SessionFactory,
lagreSøknadsbehandling: (IverksattSøknadsbehandling.Avslag, TransactionContext) -> Unit,
lagreVedtak: (Vedtak, TransactionContext) -> Unit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import no.nav.su.se.bakover.domain.vedtak.VedtakIverksattSøknadsbehandling
import no.nav.su.se.bakover.oppgave.domain.KunneIkkeLukkeOppgave
import org.slf4j.LoggerFactory
import vedtak.domain.Vedtak
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand All @@ -33,7 +34,7 @@ data class IverksattInnvilgetSøknadsbehandlingResponse(
override val søknadsbehandling = vedtak.behandling

override fun ferdigstillIverksettelseITransaksjon(
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
klargjørUtbetaling: (Utbetaling.SimulertUtbetaling, TransactionContext) -> Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
sessionFactory: SessionFactory,
lagreSøknadsbehandling: (IverksattSøknadsbehandling.Innvilget, TransactionContext) -> Unit,
lagreVedtak: (Vedtak, TransactionContext) -> Unit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class AnnullerKontrollsamtaleVedOpphørServiceImpl(
}.mapLeft {
// hentNestePlanlagteKontrollsamtale(..) returnerer kun Kontrollsamtalestatus.PLANLAGT_INNKALLING,
// som er en gyldig overgang. Så lenge det ikke endrer seg (tester?) er det trygt å kaste her.
// Iverksett revurdering er avhengig av at denne kaster for at den skal kunne rulle tilbake transaksjonen.
throw IllegalStateException("Kunne ikke annullere kontrollsamtale ${kontrollsamtale.id} med status ${kontrollsamtale.status}. Underliggende feil: $it")
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.su.se.bakover.common.persistence.SessionContext
import no.nav.su.se.bakover.common.persistence.TransactionContext
import økonomi.domain.kvittering.Kvittering
import økonomi.domain.simulering.SimuleringFeilet
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand Down Expand Up @@ -39,7 +40,7 @@ interface UtbetalingService {
fun klargjørUtbetaling(
utbetaling: Utbetaling.SimulertUtbetaling,
transactionContext: TransactionContext,
): Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>
): Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>

fun hentGjeldendeUtbetaling(
sakId: UUID,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.su.se.bakover.service.utbetaling

import arrow.core.Either
import arrow.core.getOrElse
import arrow.core.left
import arrow.core.right
import no.nav.su.se.bakover.common.UUID30
Expand All @@ -10,6 +11,7 @@ import org.slf4j.LoggerFactory
import økonomi.domain.kvittering.Kvittering
import økonomi.domain.simulering.SimuleringClient
import økonomi.domain.simulering.SimuleringFeilet
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand Down Expand Up @@ -67,15 +69,14 @@ class UtbetalingServiceImpl(
)
}

/**
* TODO jah: Klargjøringa kan ikke feile. Trenger ikke ha Left her.
*/
override fun klargjørUtbetaling(
utbetaling: Utbetaling.SimulertUtbetaling,
transactionContext: TransactionContext,
): Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>> {
): Either<KunneIkkeKlaregjøreUtbetaling, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>> {
return UtbetalingKlargjortForOversendelse(
utbetaling = utbetaling.forberedOversendelse(transactionContext),
utbetaling = utbetaling.forberedOversendelse(transactionContext).getOrElse {
return it.left()
},
callback = { utbetalingsrequest ->
sendUtbetalingTilOS(utbetalingsrequest)
},
Expand All @@ -100,12 +101,20 @@ class UtbetalingServiceImpl(

private fun Utbetaling.SimulertUtbetaling.forberedOversendelse(
transactionContext: TransactionContext,
): Utbetaling.OversendtUtbetaling.UtenKvittering {
return toOversendtUtbetaling(utbetalingPublisher.generateRequest(this)).also {
): Either<KunneIkkeKlaregjøreUtbetaling, Utbetaling.OversendtUtbetaling.UtenKvittering> {
val utbetaling: Utbetaling.OversendtUtbetaling.UtenKvittering = Either.catch {
toOversendtUtbetaling(utbetalingPublisher.generateRequest(this))
}.getOrElse {
return KunneIkkeKlaregjøreUtbetaling.KunneIkkeLageUtbetalingslinjer(it).left()
}
return Either.catch {
utbetalingRepo.opprettUtbetaling(
utbetaling = it,
utbetaling = utbetaling,
transactionContext = transactionContext,
)
utbetaling
}.mapLeft {
KunneIkkeKlaregjøreUtbetaling.KunneIkkeLagre(it)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import vedtak.domain.VedtakSomKanRevurderes
import økonomi.domain.simulering.SimuleringFeilet
import økonomi.domain.utbetaling.KunneIkkeKlaregjøreUtbetaling
import økonomi.domain.utbetaling.Utbetaling
import økonomi.domain.utbetaling.UtbetalingFeilet
import økonomi.domain.utbetaling.UtbetalingKlargjortForOversendelse
Expand Down Expand Up @@ -204,7 +205,12 @@ internal class GjenopptakAvYtelseServiceTest {
clock = clock,
)
}.whenever(it).simulerUtbetaling(any())
on { klargjørUtbetaling(any(), any()) } doReturn UtbetalingFeilet.Protokollfeil.left()
on {
klargjørUtbetaling(
any(),
any(),
)
} doReturn KunneIkkeKlaregjøreUtbetaling.KunneIkkeLagre(RuntimeException("en feil")).left()
},
clock = clock,
).let { serviceAndMocks ->
Expand Down
Loading

0 comments on commit c9a95db

Please sign in to comment.