From 2eb95cf29f36a8270472f8edb77126b3b53313a0 Mon Sep 17 00:00:00 2001 From: david steinsland Date: Sat, 21 Oct 2023 09:09:21 +0200 Subject: [PATCH] kan forkastes om alle generasjonene kan forkastes --- .../no/nav/helse/person/Generasjoner.kt | 56 ++++++++++++++++--- .../nav/helse/utbetalingslinjer/Utbetaling.kt | 4 ++ 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt index df71310dd2..d771000ab0 100644 --- a/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt +++ b/sykepenger-model/src/main/kotlin/no/nav/helse/person/Generasjoner.kt @@ -57,8 +57,9 @@ internal class Generasjoner(generasjoner: List) { internal fun erUtbetalt() = siste?.erUtbetalt() == true internal fun erUbetalt() = siste?.erUbetalt() == true - internal fun kanForkastes(arbeidsgiverUtbetalinger: List) = - Utbetaling.kanForkastes(utbetalingene, arbeidsgiverUtbetalinger) + internal fun kanForkastes(arbeidsgiverUtbetalinger: List) = generasjoner.all { generasjon -> + generasjon.kanForkastes(arbeidsgiverUtbetalinger) + } internal fun harAvsluttede() = generasjoner.any { generasjon -> generasjon.utbetaling()?.erAvsluttet() == true } internal fun harId(utbetalingId: UUID) = utbetalingene.harId(utbetalingId) internal fun hørerIkkeSammenMed(other: Utbetaling) = generasjoner.lastOrNull { generasjon -> generasjon.utbetaling()?.gyldig() == true }?.utbetaling()?.hørerSammen(other) == false @@ -458,6 +459,18 @@ internal class Generasjoner(generasjoner: List) { return tilstand.håndterUtbetalinghendelse(this, hendelse) } + fun kanForkastes(arbeidsgiverUtbetalinger: List): Boolean { + return tilstand.kanForkastes(this, arbeidsgiverUtbetalinger) + } + + private fun erUtbetalingAnnullert(arbeidsgiverUtbetalinger: List): Boolean { + val utbetalingen = checkNotNull(gjeldende.utbetaling) { + "forventer at det er en utbetaling på denne generasjonen" + } + return Utbetaling.kanForkastes(utbetalingen, arbeidsgiverUtbetalinger) + } + + /* enum class Periodetilstand { TilUtbetaling, @@ -549,10 +562,11 @@ enum class Periodetilstand { error("Støtter ikke å oppdatere dokumentsporing med $dokument i $this") } + fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List): Boolean + fun sikreNyGenerasjon(generasjon: Generasjon): Generasjon? { return null } - fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean = false fun håndterUtbetalinghendelse(generasjon: Generasjon, hendelse: UtbetalingHendelse) = false @@ -561,6 +575,10 @@ enum class Periodetilstand { check(generasjon.utbetaling() == null) { "skal ikke ha utbetaling og være uberegnet samtidig" } } + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List): Boolean { + return true + } + override fun håndterEndring(generasjon: Generasjon, arbeidsgiver: Arbeidsgiver, hendelse: SykdomshistorikkHendelse): Generasjon? { generasjon.oppdaterMedEndring(arbeidsgiver, hendelse) return null @@ -585,11 +603,20 @@ enum class Periodetilstand { generasjon.medUtbetaling(utbetaling, grunnlagsdata) generasjon.tilstand(BeregnetOmgjøring) } + + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List): Boolean { + // TODO: her kunne vi sjekket om omgjøringen kommer til å skape problemer for andre; + // i så tilfelle kan vi ikke forkaste + return true + } } data object UberegnetRevurdering : Tilstand by (Uberegnet) { override fun forkastVedtaksperiode(generasjon: Generasjon): Generasjon { return generasjon.nyGenerasjonTilInfotrygd() } + + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = true + override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return other.tilstand == TilInfotrygd } @@ -607,6 +634,9 @@ enum class Periodetilstand { checkNotNull(generasjon.gjeldende.grunnlagsdata) } + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = true + + override fun forkastVedtaksperiode(generasjon: Generasjon): Generasjon? { generasjon.gjeldende.forkastUtbetaling(Aktivitetslogg()) return super.forkastVedtaksperiode(generasjon) @@ -650,6 +680,7 @@ enum class Periodetilstand { generasjon.tilstand(UberegnetOmgjøring) return null } + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = true override fun utenUtbetaling(generasjon: Generasjon, hendelse: IAktivitetslogg) { generasjon.utenUtbetaling(hendelse) generasjon.tilstand(UberegnetOmgjøring) @@ -660,7 +691,7 @@ enum class Periodetilstand { generasjon.gjeldende.forkastUtbetaling(Aktivitetslogg()) return generasjon.nyGenerasjonTilInfotrygd() } - + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = true override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return other.tilstand == TilInfotrygd } @@ -683,6 +714,8 @@ enum class Periodetilstand { override fun forkastVedtaksperiode(generasjon: Generasjon): Generasjon { return generasjon.nyGenerasjonTilInfotrygd() } + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = + generasjon.erUtbetalingAnnullert(arbeidsgiverUtbetalinger) override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return true } @@ -692,7 +725,8 @@ enum class Periodetilstand { checkNotNull(generasjon.gjeldende.utbetaling) checkNotNull(generasjon.gjeldende.grunnlagsdata) } - + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = + generasjon.erUtbetalingAnnullert(arbeidsgiverUtbetalinger) override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return true } @@ -733,7 +767,10 @@ enum class Periodetilstand { override fun forkastVedtaksperiode(generasjon: Generasjon): Generasjon { return generasjon.nyGenerasjonTilInfotrygd() } - + // TODO: her kunne vi sjekket om omgjøringen kommer til å skape problemer for andre; + // i så tilfelle kan vi ikke forkaste + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = + true override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return true } @@ -771,7 +808,8 @@ enum class Periodetilstand { override fun forkastVedtaksperiode(generasjon: Generasjon): Generasjon { return generasjon.nyGenerasjonTilInfotrygd() } - + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List) = + generasjon.erUtbetalingAnnullert(arbeidsgiverUtbetalinger) override fun tillaterNyGenerasjon(generasjon: Generasjon, other: Generasjon): Boolean { return true } @@ -798,8 +836,10 @@ enum class Periodetilstand { override fun entering(generasjon: Generasjon) { generasjon.avsluttet = LocalDateTime.now() } + override fun kanForkastes(generasjon: Generasjon, arbeidsgiverUtbetalinger: List): Boolean { + error("forventer ikke å forkaste en periode som allerde er i $this") + } } } - } } \ No newline at end of file diff --git a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt index fd3057d189..8db339b66e 100644 --- a/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt +++ b/sykepenger-utbetaling/src/main/kotlin/no/nav/helse/utbetalingslinjer/Utbetaling.kt @@ -405,6 +405,10 @@ class Utbetaling private constructor( annulleringer.any { annullering -> annullering.hørerSammen(utbetaling) } } } + fun kanForkastes(vedtaksperiodeUtbetalingen: Utbetaling, arbeidsgiverUtbetalinger: List): Boolean { + val annulleringer = arbeidsgiverUtbetalinger.filter { it.erAnnullering() && it.tilstand != Forkastet } + return annulleringer.any { annullering -> annullering.hørerSammen(vedtaksperiodeUtbetalingen) } + } } fun accept(visitor: UtbetalingVisitor) {