From c9dd6bfd9a55ccc6a7618eb38847da304cf8b835 Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Mon, 8 May 2023 11:27:39 +0200 Subject: [PATCH 1/7] abstraher ut lagVedtakOgUtbetal() sine sideeffekter --- .../domain/regulering/ReguleringRunType.kt | 64 +++++++++++++++++++ .../regulering/ReguleringServiceImpl.kt | 37 +++-------- 2 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt new file mode 100644 index 0000000000..6a123c14c6 --- /dev/null +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt @@ -0,0 +1,64 @@ +package no.nav.su.se.bakover.domain.regulering + +import arrow.core.Either +import arrow.core.getOrElse +import no.nav.su.se.bakover.common.persistence.SessionFactory +import no.nav.su.se.bakover.common.persistence.TransactionContext +import no.nav.su.se.bakover.domain.oppdrag.Utbetaling +import no.nav.su.se.bakover.domain.oppdrag.UtbetalingFeilet +import no.nav.su.se.bakover.domain.oppdrag.UtbetalingKlargjortForOversendelse +import no.nav.su.se.bakover.domain.revurdering.iverksett.IverksettTransactionException +import no.nav.su.se.bakover.domain.revurdering.iverksett.KunneIkkeFerdigstilleIverksettelsestransaksjon +import no.nav.su.se.bakover.domain.vedtak.Vedtak +import no.nav.su.se.bakover.domain.vedtak.VedtakInnvilgetRegulering +import no.nav.su.se.bakover.domain.vedtak.VedtakSomKanRevurderes +import java.time.Clock + +interface ReguleringRunType { + val sessionFactory: SessionFactory + val lagreRegulering: (Regulering, TransactionContext) -> Unit + val lagreVedtak: (Vedtak, TransactionContext) -> Unit + val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either> +} + +sealed class LiveRun : ReguleringRunType { + + data class Iverksatt( + 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>, + ) : LiveRun() { + fun kjørSideffekter( + regulering: IverksattRegulering, + utbetaling: Utbetaling.SimulertUtbetaling, + clock: Clock, + ): VedtakInnvilgetRegulering { + return sessionFactory.withTransactionContext { tx -> + val nyUtbetaling = klargjørUtbetaling( + utbetaling, + tx, + ).getOrElse { + throw IverksettTransactionException( + "Kunne ikke opprette utbetaling. Underliggende feil:$it.", + KunneIkkeFerdigstilleIverksettelsestransaksjon.KunneIkkeUtbetale(it), + ) + } + + val vedtak = VedtakSomKanRevurderes.from( + regulering = regulering, + utbetalingId = nyUtbetaling.utbetaling.id, + clock = clock, + ) + + lagreRegulering(regulering, tx) + lagreVedtak(vedtak, tx) + + nyUtbetaling.sendUtbetaling() + .getOrElse { throw RuntimeException(it.toString()) } + + vedtak + } + } + } +} diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index 1fd461a03b..b19b756d21 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -20,6 +20,7 @@ import no.nav.su.se.bakover.domain.regulering.KunneIkkeBeregneRegulering import no.nav.su.se.bakover.domain.regulering.KunneIkkeFerdigstilleOgIverksette import no.nav.su.se.bakover.domain.regulering.KunneIkkeOppretteRegulering import no.nav.su.se.bakover.domain.regulering.KunneIkkeRegulereManuelt +import no.nav.su.se.bakover.domain.regulering.LiveRun import no.nav.su.se.bakover.domain.regulering.OpprettetRegulering import no.nav.su.se.bakover.domain.regulering.Regulering import no.nav.su.se.bakover.domain.regulering.ReguleringMerknad @@ -38,7 +39,6 @@ import no.nav.su.se.bakover.domain.satser.SatsFactory 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.VedtakInnvilgetRegulering -import no.nav.su.se.bakover.domain.vedtak.VedtakSomKanRevurderes import no.nav.su.se.bakover.service.tilbakekreving.TilbakekrevingService import no.nav.su.se.bakover.service.utbetaling.UtbetalingService import no.nav.su.se.bakover.service.vedtak.VedtakService @@ -103,6 +103,8 @@ class ReguleringServiceImpl( Sak.KunneIkkeOppretteEllerOppdatereRegulering.BleIkkeLagetReguleringDaDenneUansettMåRevurderes, Sak.KunneIkkeOppretteEllerOppdatereRegulering.StøtterIkkeVedtaktidslinjeSomIkkeErKontinuerlig -> log.error( "Regulering for saksnummer $saksnummer: Skippet. Denne feilen må varsles til saksbehandler og håndteres manuelt. Årsak: $feil", ) + + else -> TODO("fjern meg") } return@map KunneIkkeOppretteRegulering.KunneIkkeHenteEllerOppretteRegulering(feil).left() @@ -342,33 +344,14 @@ class ReguleringServiceImpl( }.getOrElse { feil -> throw KunneIkkeSendeTilUtbetalingException(UtbetalingFeilet.KunneIkkeSimulere(feil)) } - sessionFactory.withTransactionContext { tx -> - val nyUtbetaling = utbetalingService.klargjørUtbetaling( - utbetaling = utbetaling, - transactionContext = tx, - ).getOrElse { - throw KunneIkkeSendeTilUtbetalingException(it) - } - - val vedtak = VedtakSomKanRevurderes.from( - regulering = regulering, - utbetalingId = nyUtbetaling.utbetaling.id, - clock = clock, - ) - - vedtakService.lagreITransaksjon( - vedtak = vedtak, - sessionContext = tx, - ) - reguleringRepo.lagre( - regulering = regulering, - sessionContext = tx, - ) - nyUtbetaling.sendUtbetaling() - .getOrElse { throw KunneIkkeSendeTilUtbetalingException(it) } - vedtak - } + LiveRun.Iverksatt( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + ) + .kjørSideffekter(regulering, utbetaling, clock) }.mapLeft { log.error( "Regulering for saksnummer ${regulering.saksnummer}: En feil skjedde mens vi prøvde lagre utbetalingen og vedtaket; og sende utbetalingen til oppdrag for regulering", From d4b5b8b00e418d81ebb6053c3d542a7627704330 Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Mon, 8 May 2023 11:42:44 +0200 Subject: [PATCH 2/7] abstraher ut lagring av regulering --- .../domain/regulering/ReguleringRunType.kt | 13 ++++++++++++ .../regulering/ReguleringServiceImpl.kt | 21 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt index 6a123c14c6..e1df237cbf 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt @@ -23,6 +23,19 @@ interface ReguleringRunType { sealed class LiveRun : ReguleringRunType { + data class Opprettet( + 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>, + ) : LiveRun() { + fun kjørSideffekter(regulering: OpprettetRegulering) { + sessionFactory.withTransactionContext { tx -> + lagreRegulering(regulering, tx) + } + } + } + data class Iverksatt( override val sessionFactory: SessionFactory, override val lagreRegulering: (Regulering, TransactionContext) -> Unit, diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index b19b756d21..0e5077c698 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -123,11 +123,21 @@ class ReguleringServiceImpl( return@map regulering.copy( reguleringstype = Reguleringstype.MANUELL(setOf(ÅrsakTilManuellRegulering.AvventerKravgrunnlag)), ).right().onRight { - reguleringRepo.lagre(it) + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + ).kjørSideffekter(it) } } - reguleringRepo.lagre(regulering) + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + ).kjørSideffekter(regulering) if (regulering.reguleringstype is Reguleringstype.AUTOMATISK) { ferdigstillOgIverksettRegulering(regulering, sak) @@ -249,7 +259,12 @@ class ReguleringServiceImpl( .map { simulertRegulering -> simulertRegulering.tilIverksatt() } .flatMap { lagVedtakOgUtbetal(it, sak) } .onLeft { - reguleringRepo.lagre( + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + ).kjørSideffekter( regulering.copy( reguleringstype = Reguleringstype.MANUELL( setOf( From cde93108738d2b01e39ff0ec69d76f21157c35d7 Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Mon, 8 May 2023 12:21:18 +0200 Subject: [PATCH 3/7] =?UTF-8?q?kan=20kj=C3=B8re=20regulering=20med=20eller?= =?UTF-8?q?=20uten=20sideeffekter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/regulering/ReguleringRunType.kt | 9 +- .../domain/regulering/ReguleringService.kt | 11 +- .../regulering/ReguleringServiceImpl.kt | 119 ++++++++++-------- .../bakover/web/services/AccessCheckProxy.kt | 6 +- 4 files changed, 83 insertions(+), 62 deletions(-) diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt index e1df237cbf..3a6044f9ae 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringRunType.kt @@ -19,6 +19,7 @@ interface ReguleringRunType { val lagreRegulering: (Regulering, TransactionContext) -> Unit val lagreVedtak: (Vedtak, TransactionContext) -> Unit val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either> + val notifyObservers: (VedtakInnvilgetRegulering) -> Unit } sealed class LiveRun : ReguleringRunType { @@ -28,6 +29,7 @@ sealed class LiveRun : ReguleringRunType { override val lagreRegulering: (Regulering, TransactionContext) -> Unit, override val lagreVedtak: (Vedtak, TransactionContext) -> Unit, override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either>, + override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit, ) : LiveRun() { fun kjørSideffekter(regulering: OpprettetRegulering) { sessionFactory.withTransactionContext { tx -> @@ -41,13 +43,14 @@ sealed class LiveRun : ReguleringRunType { override val lagreRegulering: (Regulering, TransactionContext) -> Unit, override val lagreVedtak: (Vedtak, TransactionContext) -> Unit, override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either>, + override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit, ) : LiveRun() { fun kjørSideffekter( regulering: IverksattRegulering, utbetaling: Utbetaling.SimulertUtbetaling, clock: Clock, - ): VedtakInnvilgetRegulering { - return sessionFactory.withTransactionContext { tx -> + ) { + sessionFactory.withTransactionContext { tx -> val nyUtbetaling = klargjørUtbetaling( utbetaling, tx, @@ -70,7 +73,7 @@ sealed class LiveRun : ReguleringRunType { nyUtbetaling.sendUtbetaling() .getOrElse { throw RuntimeException(it.toString()) } - vedtak + notifyObservers(vedtak) } } } diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt index c5663d9cf1..da6a719873 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt @@ -34,7 +34,9 @@ sealed class BeregnOgSimulerFeilet { sealed class KunneIkkeOppretteRegulering { object FantIkkeSak : KunneIkkeOppretteRegulering() object FørerIkkeTilEnEndring : KunneIkkeOppretteRegulering() - data class KunneIkkeHenteEllerOppretteRegulering(val feil: Sak.KunneIkkeOppretteEllerOppdatereRegulering) : KunneIkkeOppretteRegulering() + data class KunneIkkeHenteEllerOppretteRegulering(val feil: Sak.KunneIkkeOppretteEllerOppdatereRegulering) : + KunneIkkeOppretteRegulering() + data class KunneIkkeRegulereAutomatisk(val feil: KunneIkkeFerdigstilleOgIverksette) : KunneIkkeOppretteRegulering() } @@ -44,7 +46,11 @@ sealed class KunneIkkeAvslutte { } interface ReguleringService { - fun startAutomatiskRegulering(startDato: LocalDate): List> + fun startAutomatiskRegulering( + startDato: LocalDate, + isLiveRun: Boolean = true, + ): List> + fun avslutt(reguleringId: UUID): Either fun hentStatus(): List>> fun hentSakerMedÅpenBehandlingEllerStans(): List @@ -53,5 +59,6 @@ interface ReguleringService { uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, + isLiveRun: Boolean = true, ): Either } diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index 0e5077c698..c1f8432010 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -73,6 +73,7 @@ class ReguleringServiceImpl( */ override fun startAutomatiskRegulering( startDato: LocalDate, + isLiveRun: Boolean, ): List> { return sakRepo.hentSakIdSaksnummerOgFnrForAlleSaker().map { (sakid, saksnummer, _) -> log.info("Regulering for saksnummer $saksnummer: Starter") @@ -123,24 +124,30 @@ class ReguleringServiceImpl( return@map regulering.copy( reguleringstype = Reguleringstype.MANUELL(setOf(ÅrsakTilManuellRegulering.AvventerKravgrunnlag)), ).right().onRight { - LiveRun.Opprettet( - sessionFactory = sessionFactory, - lagreRegulering = reguleringRepo::lagre, - lagreVedtak = vedtakService::lagreITransaksjon, - klargjørUtbetaling = utbetalingService::klargjørUtbetaling, - ).kjørSideffekter(it) + if (isLiveRun) { + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + notifyObservers = { Unit }, + ).kjørSideffekter(it) + } } } - LiveRun.Opprettet( - sessionFactory = sessionFactory, - lagreRegulering = reguleringRepo::lagre, - lagreVedtak = vedtakService::lagreITransaksjon, - klargjørUtbetaling = utbetalingService::klargjørUtbetaling, - ).kjørSideffekter(regulering) + if (isLiveRun) { + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + notifyObservers = { Unit }, + ).kjørSideffekter(regulering) + } if (regulering.reguleringstype is Reguleringstype.AUTOMATISK) { - ferdigstillOgIverksettRegulering(regulering, sak) + ferdigstillOgIverksettRegulering(regulering, sak, isLiveRun) .onRight { log.info("Regulering for saksnummer $saksnummer: Ferdig. Reguleringen ble ferdigstilt automatisk") } .mapLeft { feil -> KunneIkkeOppretteRegulering.KunneIkkeRegulereAutomatisk(feil = feil) } } else { @@ -169,6 +176,7 @@ class ReguleringServiceImpl( uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, + isLiveRun: Boolean, ): Either { val regulering = reguleringRepo.hent(reguleringId) ?: return KunneIkkeRegulereManuelt.FantIkkeRegulering.left() if (regulering.erFerdigstilt) return KunneIkkeRegulereManuelt.AlleredeFerdigstilt.left() @@ -201,7 +209,7 @@ class ReguleringServiceImpl( .leggTilUføre(uføregrunnlag, clock) .leggTilSaksbehandler(saksbehandler) .let { - ferdigstillOgIverksettRegulering(it, sak) + ferdigstillOgIverksettRegulering(it, sak, isLiveRun) .mapLeft { feil -> KunneIkkeRegulereManuelt.KunneIkkeFerdigstille(feil = feil) } } } @@ -210,6 +218,7 @@ class ReguleringServiceImpl( private fun ferdigstillOgIverksettRegulering( regulering: OpprettetRegulering, sak: Sak, + isLiveRun: Boolean, ): Either { return regulering.beregn( satsFactory = satsFactory, @@ -257,44 +266,40 @@ class ReguleringServiceImpl( } } .map { simulertRegulering -> simulertRegulering.tilIverksatt() } - .flatMap { lagVedtakOgUtbetal(it, sak) } + .flatMap { lagVedtakOgUtbetal(it, sak, isLiveRun) } .onLeft { - LiveRun.Opprettet( - sessionFactory = sessionFactory, - lagreRegulering = reguleringRepo::lagre, - lagreVedtak = vedtakService::lagreITransaksjon, - klargjørUtbetaling = utbetalingService::klargjørUtbetaling, - ).kjørSideffekter( - regulering.copy( - reguleringstype = Reguleringstype.MANUELL( - setOf( - ÅrsakTilManuellRegulering.UtbetalingFeilet, + if (isLiveRun) { + LiveRun.Opprettet( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + notifyObservers = { Unit }, + ).kjørSideffekter( + regulering.copy( + reguleringstype = Reguleringstype.MANUELL( + setOf( + ÅrsakTilManuellRegulering.UtbetalingFeilet, + ), ), ), - ), - ) - } - .map { - val (iverksattRegulering, vedtak) = it - - Either.catch { - // TODO jah: Vi har gjort endringer på saken underveis - endret regulering, ny utbetaling og nytt vedtak - uten at selve saken blir oppdatert underveis. Når saken returnerer en oppdatert versjon av seg selv for disse tilfellene kan vi fjerne det ekstra kallet til hentSak. - observers.forEach { observer -> - observer.handle( - StatistikkEvent.Stønadsvedtak( - vedtak, - ) { sakRepo.hentSak(sak.id)!! }, - ) - } - }.onLeft { - log.error( - "Regulering for saksnummer ${iverksattRegulering.saksnummer}: Utsending av stønadsstatistikk feilet under automatisk regulering.", - it, ) } - - iverksattRegulering } + .map { + it + } + } + + private fun notifyObservers(vedtak: VedtakInnvilgetRegulering) { + // TODO jah: Vi har gjort endringer på saken underveis - endret regulering, ny utbetaling og nytt vedtak - uten at selve saken blir oppdatert underveis. Når saken returnerer en oppdatert versjon av seg selv for disse tilfellene kan vi fjerne det ekstra kallet til hentSak. + observers.forEach { observer -> + observer.handle( + StatistikkEvent.Stønadsvedtak( + vedtak, + ) { sakRepo.hentSak(vedtak.sakId)!! }, + ) + } } override fun avslutt(reguleringId: UUID): Either { @@ -330,7 +335,8 @@ class ReguleringServiceImpl( private fun lagVedtakOgUtbetal( regulering: IverksattRegulering, sak: Sak, - ): Either> { + isLiveRun: Boolean, + ): Either { return Either.catch { val utbetaling = sak.lagNyUtbetaling( saksbehandler = regulering.saksbehandler, @@ -360,13 +366,16 @@ class ReguleringServiceImpl( throw KunneIkkeSendeTilUtbetalingException(UtbetalingFeilet.KunneIkkeSimulere(feil)) } - LiveRun.Iverksatt( - sessionFactory = sessionFactory, - lagreRegulering = reguleringRepo::lagre, - lagreVedtak = vedtakService::lagreITransaksjon, - klargjørUtbetaling = utbetalingService::klargjørUtbetaling, - ) - .kjørSideffekter(regulering, utbetaling, clock) + if (isLiveRun) { + LiveRun.Iverksatt( + sessionFactory = sessionFactory, + lagreRegulering = reguleringRepo::lagre, + lagreVedtak = vedtakService::lagreITransaksjon, + klargjørUtbetaling = utbetalingService::klargjørUtbetaling, + notifyObservers = { vedtakInnvilgetRegulering -> notifyObservers(vedtakInnvilgetRegulering) }, + ) + .kjørSideffekter(regulering, utbetaling, clock) + } }.mapLeft { log.error( "Regulering for saksnummer ${regulering.saksnummer}: En feil skjedde mens vi prøvde lagre utbetalingen og vedtaket; og sende utbetalingen til oppdrag for regulering", @@ -374,7 +383,7 @@ class ReguleringServiceImpl( ) KunneIkkeFerdigstilleOgIverksette.KunneIkkeUtbetale }.map { - Pair(regulering, it) + regulering } } diff --git a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt index b31ba398fe..9fd3ddcc1b 100644 --- a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt +++ b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt @@ -1022,8 +1022,8 @@ open class AccessCheckProxy( ) = kastKanKunKallesFraAnnenService() }, reguleringService = object : ReguleringService { - override fun startAutomatiskRegulering(startDato: LocalDate): List> { - return services.reguleringService.startAutomatiskRegulering(startDato) + override fun startAutomatiskRegulering(startDato: LocalDate, isLiveRun: Boolean): List> { + return services.reguleringService.startAutomatiskRegulering(startDato, isLiveRun) } override fun avslutt(reguleringId: UUID): Either { @@ -1043,12 +1043,14 @@ open class AccessCheckProxy( uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, + isLiveRun: Boolean, ): Either { return services.reguleringService.regulerManuelt( reguleringId, uføregrunnlag, fradrag, saksbehandler, + isLiveRun, ) } }, From 07bb6d1cf6cdcf4530ff172b839bcd0d0c57257c Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Mon, 8 May 2023 12:50:09 +0200 Subject: [PATCH 4/7] =?UTF-8?q?test=20p=C3=A5=20at=20ingen=20sideeffekter?= =?UTF-8?q?=20blir=20kj=C3=B8rt=20ved=20dry=20run?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../regulering/ReguleringServiceImplTest.kt | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt index 91ab605d99..51bd3f6280 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt @@ -16,6 +16,7 @@ import no.nav.su.se.bakover.common.juni import no.nav.su.se.bakover.common.mai import no.nav.su.se.bakover.common.periode.Periode import no.nav.su.se.bakover.common.periode.år +import no.nav.su.se.bakover.common.persistence.SessionFactory import no.nav.su.se.bakover.common.september import no.nav.su.se.bakover.domain.Sak import no.nav.su.se.bakover.domain.beregning.fradrag.FradragFactory @@ -31,12 +32,17 @@ import no.nav.su.se.bakover.domain.regulering.KunneIkkeFerdigstilleOgIverksette import no.nav.su.se.bakover.domain.regulering.KunneIkkeOppretteRegulering import no.nav.su.se.bakover.domain.regulering.KunneIkkeRegulereManuelt import no.nav.su.se.bakover.domain.regulering.OpprettetRegulering +import no.nav.su.se.bakover.domain.regulering.ReguleringRepo import no.nav.su.se.bakover.domain.regulering.Reguleringstype import no.nav.su.se.bakover.domain.regulering.ÅrsakTilManuellRegulering +import no.nav.su.se.bakover.domain.sak.SakRepo 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.søknadsbehandling.stønadsperiode.Stønadsperiode import no.nav.su.se.bakover.domain.vedtak.VedtakInnvilgetSøknadsbehandling +import no.nav.su.se.bakover.service.tilbakekreving.TilbakekrevingService +import no.nav.su.se.bakover.service.utbetaling.UtbetalingService +import no.nav.su.se.bakover.service.vedtak.VedtakService import no.nav.su.se.bakover.test.TestSessionFactory import no.nav.su.se.bakover.test.TikkendeKlokke import no.nav.su.se.bakover.test.argThat @@ -72,6 +78,7 @@ import org.mockito.kotlin.doAnswer import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions import org.mockito.kotlin.whenever import java.time.Clock import java.util.UUID @@ -360,7 +367,8 @@ internal class ReguleringServiceImplTest { reguleringService.startAutomatiskRegulering(1.mai(2023)).let { it.size shouldBe 1 - it.first() shouldBe KunneIkkeOppretteRegulering.KunneIkkeHenteEllerOppretteRegulering(feil = Sak.KunneIkkeOppretteEllerOppdatereRegulering.FinnesIngenVedtakSomKanRevurderesForValgtPeriode).left() + it.first() shouldBe KunneIkkeOppretteRegulering.KunneIkkeHenteEllerOppretteRegulering(feil = Sak.KunneIkkeOppretteEllerOppdatereRegulering.FinnesIngenVedtakSomKanRevurderesForValgtPeriode) + .left() } } @@ -490,6 +498,37 @@ internal class ReguleringServiceImplTest { verify(eventObserverMock).handle(argThat { it.shouldBeTypeOf() }) } + @Test + fun `gjør ingen sideeffekter ved dry run`() { + val sak = vedtakSøknadsbehandlingIverksattInnvilget().first + + val reguleringMock = mock {} + val sakRepo = mock { + on { hentSak(any()) } doReturn sak + } + val utbetalingMock = mock {} + val vedtakMock = mock {} + val sessionMock = mock {} + val tilbakekrevingMock = mock {} + + ReguleringServiceImpl( + reguleringRepo = reguleringMock, + sakRepo = sakRepo, + utbetalingService = utbetalingMock, + vedtakService = vedtakMock, + sessionFactory = sessionMock, + tilbakekrevingService = tilbakekrevingMock, + clock = fixedClock, + satsFactory = satsFactoryTestPåDato(), + ).startAutomatiskRegulering(1.mai(2022), false) + + verifyNoInteractions(reguleringMock) + verifyNoInteractions(utbetalingMock) + verifyNoInteractions(vedtakMock) + verifyNoInteractions(sessionMock) + verifyNoInteractions(tilbakekrevingMock) + } + /** * @param scrambleUtbetaling Endrer utbetalingslinjene på saken slik at de ikke lenger matcher gjeldendeVedtaksdata. Da tvinger vi fram en ny beregning som har andre beløp enn tidligere utbetalinger. */ From 0dfbc7fbe267a17a88338c7e9e69b0c2fbb40a9f Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Mon, 8 May 2023 13:47:55 +0200 Subject: [PATCH 5/7] =?UTF-8?q?route=20for=20=C3=A5=20kj=C3=B8re=20en=20dr?= =?UTF-8?q?y=20run?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/regulering/ReguleringService.kt | 6 ++++-- .../regulering/ReguleringServiceImpl.kt | 21 ++++++++++++++----- .../regulering/ReguleringServiceImplTest.kt | 2 +- .../regulering/RegulerAutomatiskRoute.kt | 12 +++++++++++ .../bakover/web/services/AccessCheckProxy.kt | 11 ++++++++-- 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt index da6a719873..23b37458b2 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt @@ -46,9 +46,11 @@ sealed class KunneIkkeAvslutte { } interface ReguleringService { - fun startAutomatiskRegulering( + fun startAutomatiskRegulering(startDato: LocalDate): List> + + fun startAutomatiskReguleringForInnsyn( startDato: LocalDate, - isLiveRun: Boolean = true, + gVerdi: Int, ): List> fun avslutt(reguleringId: UUID): Either diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index c1f8432010..e43a22e2d2 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -67,11 +67,24 @@ class ReguleringServiceImpl( fun getObservers(): List = observers.toList() + override fun startAutomatiskRegulering( + startDato: LocalDate, + ): List> { + return start(startDato, true) + } + + override fun startAutomatiskReguleringForInnsyn( + startDato: LocalDate, + gVerdi: Int, + ): List> { + return start(startDato, false) + } + /** * Henter saksinformasjon for alle saker og løper igjennom alle sakene et etter en. * Dette kan ta lang tid, så denne bør ikke kjøres synkront. */ - override fun startAutomatiskRegulering( + private fun start( startDato: LocalDate, isLiveRun: Boolean, ): List> { @@ -98,14 +111,12 @@ class ReguleringServiceImpl( // TODO jah: Dersom en [OpprettetRegulering] allerede eksisterte i databasen, bør vi kanskje slette den her. when (feil) { Sak.KunneIkkeOppretteEllerOppdatereRegulering.FinnesIngenVedtakSomKanRevurderesForValgtPeriode -> log.info( - "Regulering for saksnummer $saksnummer: Skippet. Fantes ingen vedtak for valgt periode.", + "Regulering for saksnummer ${sak.saksnummer}: Skippet. Fantes ingen vedtak for valgt periode.", ) Sak.KunneIkkeOppretteEllerOppdatereRegulering.BleIkkeLagetReguleringDaDenneUansettMåRevurderes, Sak.KunneIkkeOppretteEllerOppdatereRegulering.StøtterIkkeVedtaktidslinjeSomIkkeErKontinuerlig -> log.error( - "Regulering for saksnummer $saksnummer: Skippet. Denne feilen må varsles til saksbehandler og håndteres manuelt. Årsak: $feil", + "Regulering for saksnummer ${sak.saksnummer}: Skippet. Denne feilen må varsles til saksbehandler og håndteres manuelt. Årsak: $feil", ) - - else -> TODO("fjern meg") } return@map KunneIkkeOppretteRegulering.KunneIkkeHenteEllerOppretteRegulering(feil).left() diff --git a/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt b/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt index 51bd3f6280..3e22b7f1a2 100644 --- a/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt +++ b/service/src/test/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImplTest.kt @@ -520,7 +520,7 @@ internal class ReguleringServiceImplTest { tilbakekrevingService = tilbakekrevingMock, clock = fixedClock, satsFactory = satsFactoryTestPåDato(), - ).startAutomatiskRegulering(1.mai(2022), false) + ).startAutomatiskRegulering(1.mai(2022)) verifyNoInteractions(reguleringMock) verifyNoInteractions(utbetalingMock) diff --git a/web/src/main/kotlin/no/nav/su/se/bakover/web/routes/regulering/RegulerAutomatiskRoute.kt b/web/src/main/kotlin/no/nav/su/se/bakover/web/routes/regulering/RegulerAutomatiskRoute.kt index 0a441ee65a..512a748268 100644 --- a/web/src/main/kotlin/no/nav/su/se/bakover/web/routes/regulering/RegulerAutomatiskRoute.kt +++ b/web/src/main/kotlin/no/nav/su/se/bakover/web/routes/regulering/RegulerAutomatiskRoute.kt @@ -155,6 +155,18 @@ internal fun Route.reguler( ) } } + + post("$reguleringPath/automatisk/dry") { + authorize(Brukerrolle.Drift) { + data class Request(val startDato: LocalDate, val verdi: Int) + call.withBody { + CoroutineScope(Dispatchers.IO).launch { + reguleringService.startAutomatiskReguleringForInnsyn(it.startDato, it.verdi) + } + call.svar(Resultat.okJson()) + } + } + } } private fun List.toDomain(clock: Clock): Either> { diff --git a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt index 9fd3ddcc1b..e9790869c8 100644 --- a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt +++ b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt @@ -1022,8 +1022,15 @@ open class AccessCheckProxy( ) = kastKanKunKallesFraAnnenService() }, reguleringService = object : ReguleringService { - override fun startAutomatiskRegulering(startDato: LocalDate, isLiveRun: Boolean): List> { - return services.reguleringService.startAutomatiskRegulering(startDato, isLiveRun) + override fun startAutomatiskRegulering(startDato: LocalDate): List> { + return services.reguleringService.startAutomatiskRegulering(startDato) + } + + override fun startAutomatiskReguleringForInnsyn( + startDato: LocalDate, + gVerdi: Int, + ): List> { + return services.reguleringService.startAutomatiskReguleringForInnsyn(startDato, gVerdi) } override fun avslutt(reguleringId: UUID): Either { From 718d2f8cf80f285e40ff9c7f178f351f7a34a393 Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Tue, 9 May 2023 15:04:30 +0200 Subject: [PATCH 6/7] legger inn en fiktiv sats factory for dry-run regulering --- README.md | 3 +- .../domain/regulering/ReguleringService.kt | 1 - ...SatsFactoryForSupplerendeSt\303\270nad.kt" | 43 ++++++++++--------- .../regulering/ReguleringServiceImpl.kt | 32 +++++++++++--- 4 files changed, 51 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 4ce94a77cf..d102304120 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ Backup Import 1. For å legge inn dataen i basen kan du kjøre følgende `pg_restore -h remote_host -p remote_port -U brukernavn -d database_name filnavn.dump` - - eksempel for lokalt `pg_restore -c --if-exists -U user -d supstonad-db-local filnavn.dump` + - eksempel for lokalt `pg_restore -c --if-exists -h localhost -p 5432 -U user -d database_name filnavn.dump` + - password er `pwd` - Terminal vil kanskje gi deg en del 'errors' pga roller etc. Disse kan du se bort ifra - Hvis du samtidig inspecter filen (f.eks nano) vil du kanskje se en del encoding issues. Disse var heller ikke et problem ved import diff --git a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt index 23b37458b2..96b4ece0d0 100644 --- a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt +++ b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/regulering/ReguleringService.kt @@ -61,6 +61,5 @@ interface ReguleringService { uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, - isLiveRun: Boolean = true, ): Either } diff --git "a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/satser/SatsFactoryForSupplerendeSt\303\270nad.kt" "b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/satser/SatsFactoryForSupplerendeSt\303\270nad.kt" index a26a2434df..d618f637a9 100644 --- "a/domain/src/main/kotlin/no/nav/su/se/bakover/domain/satser/SatsFactoryForSupplerendeSt\303\270nad.kt" +++ "b/domain/src/main/kotlin/no/nav/su/se/bakover/domain/satser/SatsFactoryForSupplerendeSt\303\270nad.kt" @@ -25,6 +25,28 @@ import java.time.ZoneId * Per tidspunkt er alle virkningstidspunkt og ikrafttredelser i stigende rekkefølge, men det trenger ikke være tilfelle i framtiden. * Da må vi skrive om denne logikken. På sikt bør nok disse gjøres om til en lenket liste, som modellerer virkeligheten bedre. */ + +val grunnbeløpsendringer = nonEmptyListOf( + Grunnbeløpsendring(1.mai(2005), 1.mai(2005), 60699), + Grunnbeløpsendring(1.mai(2006), 1.mai(2006), 62892), + Grunnbeløpsendring(1.mai(2007), 1.mai(2007), 66812), + Grunnbeløpsendring(1.mai(2008), 1.mai(2008), 70256), + Grunnbeløpsendring(1.mai(2009), 1.mai(2009), 72881), + Grunnbeløpsendring(1.mai(2010), 1.mai(2010), 75641), + Grunnbeløpsendring(1.mai(2011), 1.mai(2011), 79216), + Grunnbeløpsendring(1.mai(2012), 1.mai(2012), 82122), + Grunnbeløpsendring(1.mai(2013), 1.mai(2013), 85245), + Grunnbeløpsendring(1.mai(2014), 1.mai(2014), 88370), + Grunnbeløpsendring(1.mai(2015), 1.mai(2015), 90068), + Grunnbeløpsendring(1.mai(2016), 1.mai(2016), 92576), + Grunnbeløpsendring(1.mai(2017), 1.mai(2017), 93634), + Grunnbeløpsendring(1.mai(2018), 1.mai(2018), 96883), + Grunnbeløpsendring(1.mai(2019), 1.mai(2019), 99858), + Grunnbeløpsendring(1.mai(2020), 4.september(2020), 101351), + Grunnbeløpsendring(1.mai(2021), 21.mai(2021), 106399), + Grunnbeløpsendring(1.mai(2022), 20.mai(2022), 111477), +) + class SatsFactoryForSupplerendeStønad( // TODO(satsfactory_alder) jah: I lov om supplerende stønad ble satsen for alder endret fra minste pensjonsnivå til garantipensjon fra og med 2021-01-01. // Vi må legge inn minste pensjonsnivå og ta høyde for det før vi skal revurdere tilbake til før 2021-01-01. @@ -32,26 +54,7 @@ class SatsFactoryForSupplerendeStønad( private val tidligsteTilgjengeligeMåned: Måned = januar(2020), private val datoTilFactory: MutableMap = mutableMapOf(), /** Se kommentarer på garantipensjon lav for lovreferanser. */ - private val grunnbeløpsendringer: Nel = nonEmptyListOf( - Grunnbeløpsendring(1.mai(2005), 1.mai(2005), 60699), - Grunnbeløpsendring(1.mai(2006), 1.mai(2006), 62892), - Grunnbeløpsendring(1.mai(2007), 1.mai(2007), 66812), - Grunnbeløpsendring(1.mai(2008), 1.mai(2008), 70256), - Grunnbeløpsendring(1.mai(2009), 1.mai(2009), 72881), - Grunnbeløpsendring(1.mai(2010), 1.mai(2010), 75641), - Grunnbeløpsendring(1.mai(2011), 1.mai(2011), 79216), - Grunnbeløpsendring(1.mai(2012), 1.mai(2012), 82122), - Grunnbeløpsendring(1.mai(2013), 1.mai(2013), 85245), - Grunnbeløpsendring(1.mai(2014), 1.mai(2014), 88370), - Grunnbeløpsendring(1.mai(2015), 1.mai(2015), 90068), - Grunnbeløpsendring(1.mai(2016), 1.mai(2016), 92576), - Grunnbeløpsendring(1.mai(2017), 1.mai(2017), 93634), - Grunnbeløpsendring(1.mai(2018), 1.mai(2018), 96883), - Grunnbeløpsendring(1.mai(2019), 1.mai(2019), 99858), - Grunnbeløpsendring(1.mai(2020), 4.september(2020), 101351), - Grunnbeløpsendring(1.mai(2021), 21.mai(2021), 106399), - Grunnbeløpsendring(1.mai(2022), 20.mai(2022), 111477), - ), + private val grunnbeløpsendringer: Nel = no.nav.su.se.bakover.domain.satser.grunnbeløpsendringer, /** * Garantipensjon ble innført som konsept 2016-01-01: https://lovdata.no/forskrift/2015-11-20-1335/§1. * Satsene endres ofte sammen med grunnbeløpet. diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index e43a22e2d2..b42a7c7761 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -10,6 +10,7 @@ import no.nav.su.se.bakover.common.persistence.SessionFactory import no.nav.su.se.bakover.common.toNonEmptyList import no.nav.su.se.bakover.domain.Sak import no.nav.su.se.bakover.domain.beregning.fradrag.Fradragstype +import no.nav.su.se.bakover.domain.grunnbeløp.Grunnbeløpsendring import no.nav.su.se.bakover.domain.grunnlag.Grunnlag import no.nav.su.se.bakover.domain.oppdrag.UtbetalingFeilet import no.nav.su.se.bakover.domain.oppdrag.UtbetalingsinstruksjonForEtterbetalinger @@ -36,6 +37,8 @@ import no.nav.su.se.bakover.domain.sak.Sakstype import no.nav.su.se.bakover.domain.sak.lagNyUtbetaling import no.nav.su.se.bakover.domain.sak.simulerUtbetaling import no.nav.su.se.bakover.domain.satser.SatsFactory +import no.nav.su.se.bakover.domain.satser.SatsFactoryForSupplerendeStønad +import no.nav.su.se.bakover.domain.satser.grunnbeløpsendringer 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.VedtakInnvilgetRegulering @@ -70,14 +73,20 @@ class ReguleringServiceImpl( override fun startAutomatiskRegulering( startDato: LocalDate, ): List> { - return start(startDato, true) + return start(startDato, true, satsFactory) } override fun startAutomatiskReguleringForInnsyn( startDato: LocalDate, gVerdi: Int, ): List> { - return start(startDato, false) + return start( + startDato, + false, + SatsFactoryForSupplerendeStønad( + grunnbeløpsendringer = grunnbeløpsendringer + Grunnbeløpsendring(startDato, startDato, gVerdi), + ).gjeldende(startDato), + ) } /** @@ -87,6 +96,7 @@ class ReguleringServiceImpl( private fun start( startDato: LocalDate, isLiveRun: Boolean, + satsFactory: SatsFactory, ): List> { return sakRepo.hentSakIdSaksnummerOgFnrForAlleSaker().map { (sakid, saksnummer, _) -> log.info("Regulering for saksnummer $saksnummer: Starter") @@ -117,6 +127,8 @@ class ReguleringServiceImpl( Sak.KunneIkkeOppretteEllerOppdatereRegulering.BleIkkeLagetReguleringDaDenneUansettMåRevurderes, Sak.KunneIkkeOppretteEllerOppdatereRegulering.StøtterIkkeVedtaktidslinjeSomIkkeErKontinuerlig -> log.error( "Regulering for saksnummer ${sak.saksnummer}: Skippet. Denne feilen må varsles til saksbehandler og håndteres manuelt. Årsak: $feil", ) + + else -> TODO("fjern meg") } return@map KunneIkkeOppretteRegulering.KunneIkkeHenteEllerOppretteRegulering(feil).left() @@ -158,11 +170,11 @@ class ReguleringServiceImpl( } if (regulering.reguleringstype is Reguleringstype.AUTOMATISK) { - ferdigstillOgIverksettRegulering(regulering, sak, isLiveRun) + ferdigstillOgIverksettRegulering(regulering, sak, isLiveRun, satsFactory) .onRight { log.info("Regulering for saksnummer $saksnummer: Ferdig. Reguleringen ble ferdigstilt automatisk") } .mapLeft { feil -> KunneIkkeOppretteRegulering.KunneIkkeRegulereAutomatisk(feil = feil) } } else { - log.info("Regulering for saksnummer $saksnummer: Ferdig. Reguleringen må behandles manuelt.") + log.info("Regulering for saksnummer $saksnummer: Ferdig. Reguleringen må behandles manuelt. ${(regulering.reguleringstype as Reguleringstype.MANUELL).problemer}") regulering.right() } }.also { @@ -174,6 +186,14 @@ class ReguleringServiceImpl( val regulert = it.mapNotNull { regulering -> regulering.fold(ifLeft = { null }, ifRight = { it }) } + + val årsaker = regulert + .filter { regulering -> regulering.reguleringstype is Reguleringstype.MANUELL } + .flatMap { (it.reguleringstype as Reguleringstype.MANUELL).problemer.toList() } + .groupBy { it } + .map { it.key to it.value.size } + .joinToString { "${it.first}: ${it.second}" } + val antallAutomatiske = regulert.filter { regulering -> regulering.reguleringstype is Reguleringstype.AUTOMATISK }.size val antallManuelle = @@ -187,7 +207,6 @@ class ReguleringServiceImpl( uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, - isLiveRun: Boolean, ): Either { val regulering = reguleringRepo.hent(reguleringId) ?: return KunneIkkeRegulereManuelt.FantIkkeRegulering.left() if (regulering.erFerdigstilt) return KunneIkkeRegulereManuelt.AlleredeFerdigstilt.left() @@ -220,7 +239,7 @@ class ReguleringServiceImpl( .leggTilUføre(uføregrunnlag, clock) .leggTilSaksbehandler(saksbehandler) .let { - ferdigstillOgIverksettRegulering(it, sak, isLiveRun) + ferdigstillOgIverksettRegulering(it, sak, true, satsFactory) .mapLeft { feil -> KunneIkkeRegulereManuelt.KunneIkkeFerdigstille(feil = feil) } } } @@ -230,6 +249,7 @@ class ReguleringServiceImpl( regulering: OpprettetRegulering, sak: Sak, isLiveRun: Boolean, + satsFactory: SatsFactory, ): Either { return regulering.beregn( satsFactory = satsFactory, From b9998ad579fab4e7003e57aa700440d3b8279498 Mon Sep 17 00:00:00 2001 From: ramziabuqassim Date: Tue, 9 May 2023 15:12:08 +0200 Subject: [PATCH 7/7] Changes by hestad --- .../su/se/bakover/service/regulering/ReguleringServiceImpl.kt | 2 +- .../no/nav/su/se/bakover/web/services/AccessCheckProxy.kt | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt index b42a7c7761..f4c952b66a 100644 --- a/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt +++ b/service/src/main/kotlin/no/nav/su/se/bakover/service/regulering/ReguleringServiceImpl.kt @@ -199,7 +199,7 @@ class ReguleringServiceImpl( val antallManuelle = regulert.filter { regulering -> regulering.reguleringstype is Reguleringstype.MANUELL }.size - log.info("Totalt antall prosesserte reguleringer: ${regulert.size}, antall automatiske: $antallAutomatiske, antall manuelle: $antallManuelle") + log.info("Totalt antall prosesserte reguleringer: ${regulert.size}, antall automatiske: $antallAutomatiske, antall manuelle: $antallManuelle, årsaker: $årsaker") } override fun regulerManuelt( diff --git a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt index e9790869c8..2c9c9f19f3 100644 --- a/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt +++ b/web/src/main/kotlin/no/nav/su/se/bakover/web/services/AccessCheckProxy.kt @@ -1050,14 +1050,12 @@ open class AccessCheckProxy( uføregrunnlag: List, fradrag: List, saksbehandler: NavIdentBruker.Saksbehandler, - isLiveRun: Boolean, ): Either { return services.reguleringService.regulerManuelt( reguleringId, uføregrunnlag, fradrag, saksbehandler, - isLiveRun, ) } },