Skip to content

Commit

Permalink
Merge pull request #1373 from navikt/dry-run-regulering
Browse files Browse the repository at this point in the history
Dry run regulering
  • Loading branch information
RamziAbuQassim authored May 9, 2023
2 parents 0599994 + b9998ad commit 655e9cd
Show file tree
Hide file tree
Showing 8 changed files with 274 additions and 86 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
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<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>
val notifyObservers: (VedtakInnvilgetRegulering) -> Unit
}

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<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit,
) : 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,
override val lagreVedtak: (Vedtak, TransactionContext) -> Unit,
override val klargjørUtbetaling: (utbetaling: Utbetaling.SimulertUtbetaling, tx: TransactionContext) -> Either<UtbetalingFeilet, UtbetalingKlargjortForOversendelse<UtbetalingFeilet.Protokollfeil>>,
override val notifyObservers: (VedtakInnvilgetRegulering) -> Unit,
) : LiveRun() {
fun kjørSideffekter(
regulering: IverksattRegulering,
utbetaling: Utbetaling.SimulertUtbetaling,
clock: Clock,
) {
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()) }

notifyObservers(vedtak)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}

Expand All @@ -45,6 +47,12 @@ sealed class KunneIkkeAvslutte {

interface ReguleringService {
fun startAutomatiskRegulering(startDato: LocalDate): List<Either<KunneIkkeOppretteRegulering, Regulering>>

fun startAutomatiskReguleringForInnsyn(
startDato: LocalDate,
gVerdi: Int,
): List<Either<KunneIkkeOppretteRegulering, Regulering>>

fun avslutt(reguleringId: UUID): Either<KunneIkkeAvslutte, AvsluttetRegulering>
fun hentStatus(): List<Pair<Regulering, List<ReguleringMerknad>>>
fun hentSakerMedÅpenBehandlingEllerStans(): List<Saksnummer>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,33 +25,36 @@ 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.
// På grunn av testene må vi sette sperren til 2020 (TODO jah: fiks testene)
private val tidligsteTilgjengeligeMåned: Måned = januar(2020),
private val datoTilFactory: MutableMap<Knekkpunkt, SatsFactoryForSupplerendeStønadPåKnekkpunkt> = mutableMapOf(),
/** Se kommentarer på garantipensjon lav for lovreferanser. */
private val grunnbeløpsendringer: Nel<Grunnbeløpsendring> = 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<Grunnbeløpsendring> = 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.
Expand Down
Loading

0 comments on commit 655e9cd

Please sign in to comment.