diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperFerdigstillingVedtak.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperFerdigstillingVedtak.kt index 43e75e2d139..10f23effa0c 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperFerdigstillingVedtak.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperFerdigstillingVedtak.kt @@ -492,7 +492,6 @@ class BrevDataMapperFerdigstillingVedtak( ) } val trygdetid = async { trygdetidService.hentTrygdetid(behandlingId, bruker) } - val etterbetaling = async { behandlingService.hentEtterbetaling(behandlingId, bruker) } val brevutfall = async { behandlingService.hentBrevutfall(behandlingId, bruker) } val vilkaarsvurdering = async { vilkaarsvurderingService.hentVilkaarsvurdering(behandlingId, bruker) } val behandling = behandlingService.hentBehandling(behandlingId, bruker) @@ -508,7 +507,6 @@ class BrevDataMapperFerdigstillingVedtak( OmstillingsstoenadRevurdering.fra( innholdMedVedlegg, avkortingsinfo.await(), - etterbetaling.await(), requireNotNull(trygdetid.await()) { "Mangler trygdetid" }.single(), brevutfall.await() ?: throw ManglerBrevutfall(behandlingId), revurderingaarsak, diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperRedigerbartUtfallVedtak.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperRedigerbartUtfallVedtak.kt index 61d475bee0b..1dd5b9454d0 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperRedigerbartUtfallVedtak.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/BrevDataMapperRedigerbartUtfallVedtak.kt @@ -188,6 +188,7 @@ class BrevDataMapperRedigerbartUtfallVedtak( virkningstidspunkt!!, sakType, vedtakType, + revurderingaarsak, ) } } @@ -342,6 +343,7 @@ class BrevDataMapperRedigerbartUtfallVedtak( virkningstidspunkt: YearMonth, sakType: SakType, vedtakType: VedtakType, + revurderingaarsak: Revurderingaarsak?, ) = coroutineScope { val avkortingsinfo = async { @@ -355,11 +357,14 @@ class BrevDataMapperRedigerbartUtfallVedtak( } val etterbetaling = async { behandlingService.hentEtterbetaling(behandlingId, bruker) } val brevutfall = async { behandlingService.hentBrevutfall(behandlingId, bruker) } + val behandling = behandlingService.hentBehandling(behandlingId, bruker) OmstillingsstoenadRevurderingRedigerbartUtfall.fra( requireNotNull(avkortingsinfo.await()), - etterbetaling.await(), + behandling, brevutfall.await() ?: throw ManglerBrevutfall(behandlingId), + etterbetaling.await(), + revurderingaarsak, ) } diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/EtterlatteBrev.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/EtterlatteBrev.kt index 816b05df677..2ed59f83acf 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/EtterlatteBrev.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/EtterlatteBrev.kt @@ -1,5 +1,6 @@ package no.nav.etterlatte.brev.model +import no.nav.etterlatte.brev.BrevData import no.nav.etterlatte.brev.HarVedlegg import no.nav.etterlatte.brev.Slate import no.nav.etterlatte.brev.behandling.Avdoed @@ -75,6 +76,15 @@ data class OmstillingsstoenadBeregning( val opphoerNesteAar: Boolean, ) : HarVedlegg +data class OmstillingsstoenadBeregningRedigerbartUtfall( + val virkningsdato: LocalDate, + val beregningsperioder: List, + val sisteBeregningsperiode: OmstillingsstoenadBeregningsperiode, + val sisteBeregningsperiodeNesteAar: OmstillingsstoenadBeregningsperiode?, + val oppphoersdato: LocalDate?, + val opphoerNesteAar: Boolean, +) : BrevData + data class OmstillingsstoenadBeregningsperiode( val datoFOM: LocalDate, val datoTOM: LocalDate?, diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/oms/OmstillingsstoenadRevurdering.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/oms/OmstillingsstoenadRevurdering.kt index 5773985ba35..2ce5bb2533b 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/oms/OmstillingsstoenadRevurdering.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/model/oms/OmstillingsstoenadRevurdering.kt @@ -10,6 +10,7 @@ import no.nav.etterlatte.brev.model.EtterbetalingDTO import no.nav.etterlatte.brev.model.FeilutbetalingType import no.nav.etterlatte.brev.model.InnholdMedVedlegg import no.nav.etterlatte.brev.model.OmstillingsstoenadBeregning +import no.nav.etterlatte.brev.model.OmstillingsstoenadBeregningRedigerbartUtfall import no.nav.etterlatte.brev.model.OmstillingsstoenadEtterbetaling import no.nav.etterlatte.brev.model.fromDto import no.nav.etterlatte.brev.model.toFeilutbetalingType @@ -33,9 +34,6 @@ data class OmstillingsstoenadRevurdering( val erOmgjoering: Boolean, val datoVedtakOmgjoering: LocalDate?, val beregning: OmstillingsstoenadBeregning, - val etterbetaling: OmstillingsstoenadEtterbetaling?, - val harFlereUtbetalingsperioder: Boolean, - val harUtbetaling: Boolean, val omsRettUtenTidsbegrensning: Boolean, val feilutbetaling: FeilutbetalingType, val bosattUtland: Boolean, @@ -53,7 +51,6 @@ data class OmstillingsstoenadRevurdering( fun fra( innholdMedVedlegg: InnholdMedVedlegg, avkortingsinfo: Avkortingsinfo, - etterbetalingDTO: EtterbetalingDTO?, trygdetid: TrygdetidDto, brevutfall: BrevutfallDto, revurderingaarsak: Revurderingaarsak?, @@ -108,15 +105,6 @@ data class OmstillingsstoenadRevurdering( opphoerNesteAar = beregningsperioderOpphoer.forventetOpphoerDato?.year == (behandling.virkningstidspunkt().dato.year + 1), ), - etterbetaling = - etterbetalingDTO?.let { - Etterbetaling.fraOmstillingsstoenadBeregningsperioder( - etterbetalingDTO, - beregningsperioder, - ) - }, - harFlereUtbetalingsperioder = beregningsperioder.size > 1, - harUtbetaling = beregningsperioder.any { it.utbetaltBeloep.value > 0 }, omsRettUtenTidsbegrensning = omsRettUtenTidsbegrensning.hovedvilkaar.resultat == Utfall.OPPFYLT, feilutbetaling = feilutbetaling, bosattUtland = utlandstilknytning == UtlandstilknytningType.BOSATT_UTLAND, @@ -126,20 +114,54 @@ data class OmstillingsstoenadRevurdering( } data class OmstillingsstoenadRevurderingRedigerbartUtfall( + val beregning: OmstillingsstoenadBeregningRedigerbartUtfall, + val erEndret: Boolean, + val erEtterbetaling: Boolean, + val etterbetaling: OmstillingsstoenadEtterbetaling?, val feilutbetaling: FeilutbetalingType, + val harFlereUtbetalingsperioder: Boolean, val harUtbetaling: Boolean, - val erEtterbetaling: Boolean, ) : BrevDataRedigerbar { companion object { fun fra( avkortingsinfo: Avkortingsinfo, - etterbetaling: EtterbetalingDTO?, + behandling: DetaljertBehandling, brevutfall: BrevutfallDto, - ): OmstillingsstoenadRevurderingRedigerbartUtfall = - OmstillingsstoenadRevurderingRedigerbartUtfall( - feilutbetaling = toFeilutbetalingType(requireNotNull(brevutfall.feilutbetaling?.valg)), - harUtbetaling = avkortingsinfo.beregningsperioder.any { it.utbetaltBeloep.value > 0 }, + etterbetaling: EtterbetalingDTO?, + revurderingaarsak: Revurderingaarsak?, + ): OmstillingsstoenadRevurderingRedigerbartUtfall { + val beregningsperioder = + avkortingsinfo.beregningsperioder.map { it.tilOmstillingsstoenadBeregningsperiode() } + + val beregningsperioderOpphoer = utledBeregningsperioderOpphoer(behandling, beregningsperioder) + val sisteBeregningsperiode = beregningsperioderOpphoer.sisteBeregningsperiode + + return OmstillingsstoenadRevurderingRedigerbartUtfall( + beregning = + OmstillingsstoenadBeregningRedigerbartUtfall( + virkningsdato = avkortingsinfo.virkningsdato, + beregningsperioder = beregningsperioder, + sisteBeregningsperiode = sisteBeregningsperiode, + sisteBeregningsperiodeNesteAar = beregningsperioderOpphoer.sisteBeregningsperiodeNesteAar, + oppphoersdato = beregningsperioderOpphoer.forventetOpphoerDato, + opphoerNesteAar = + beregningsperioderOpphoer.forventetOpphoerDato?.year == (behandling.virkningstidspunkt().dato.year + 1), + ), + erEndret = + avkortingsinfo.endringIUtbetalingVedVirk || + revurderingaarsak == Revurderingaarsak.FRA_0UTBETALING_TIL_UTBETALING, erEtterbetaling = etterbetaling != null, + etterbetaling = + etterbetaling?.let { + Etterbetaling.fraOmstillingsstoenadBeregningsperioder( + etterbetaling, + beregningsperioder, + ) + }, + feilutbetaling = toFeilutbetalingType(requireNotNull(brevutfall.feilutbetaling?.valg)), + harFlereUtbetalingsperioder = beregningsperioder.size > 1, + harUtbetaling = beregningsperioder.any { it.utbetaltBeloep.value > 0 }, ) + } } } diff --git a/apps/etterlatte-brev-api/src/test/kotlin/no/nav/etterlatte/brev/VedtaksbrevServiceTest.kt b/apps/etterlatte-brev-api/src/test/kotlin/no/nav/etterlatte/brev/VedtaksbrevServiceTest.kt index a86de4c23f7..02cb9971154 100644 --- a/apps/etterlatte-brev-api/src/test/kotlin/no/nav/etterlatte/brev/VedtaksbrevServiceTest.kt +++ b/apps/etterlatte-brev-api/src/test/kotlin/no/nav/etterlatte/brev/VedtaksbrevServiceTest.kt @@ -16,6 +16,7 @@ import no.nav.etterlatte.behandling.randomSakId import no.nav.etterlatte.brev.adresse.AdresseService import no.nav.etterlatte.brev.adresse.Avsender import no.nav.etterlatte.brev.behandling.Avdoed +import no.nav.etterlatte.brev.behandling.AvkortetBeregningsperiode import no.nav.etterlatte.brev.behandling.Avkortingsinfo import no.nav.etterlatte.brev.behandling.Beregningsperiode import no.nav.etterlatte.brev.behandling.ForenkletVedtak @@ -238,22 +239,52 @@ internal class VedtaksbrevServiceTest { val behandling = opprettGenerellBrevdata(sakType, vedtakType) val mottaker = opprettMottaker() - every { db.hentBrevForBehandling(behandling.behandlingId!!, Brevtype.VEDTAK) } returns emptyList() + every { db.hentBrevForBehandling(BEHANDLING_ID, Brevtype.VEDTAK) } returns emptyList() coEvery { brevdataFacade.hentGenerellBrevData(any(), any(), any(), any()) } returns behandling coEvery { adresseService.hentAvsender(any(), any()) } returns opprettAvsender() coEvery { adresseService.hentMottakerAdresse(any(), any()) } returns mottaker coEvery { brevbakerService.hentRedigerbarTekstFraBrevbakeren(any()) } returns Slate(emptyList()) coEvery { behandlingService.hentVedtaksbehandlingKanRedigeres(any(), any()) } returns true - coEvery { behandlingService.hentEtterbetaling(any(), any()) } returns mockk() + coEvery { behandlingService.hentEtterbetaling(any(), any()) } returns null coEvery { behandlingService.hentBrevutfall(any(), any()) } returns mockk { every { feilutbetaling?.valg } returns FeilutbetalingValg.JA_VARSEL every { aldersgruppe } returns Aldersgruppe.UNDER_18 } + if (sakType == SakType.OMSTILLINGSSTOENAD) { + coEvery { behandlingService.hentBehandling(any(), any()) } returns + mockk { + every { opphoerFraOgMed } returns null + } + coEvery { beregningService.finnAvkortingsinfo(any(), any(), any(), any(), any()) } returns - Avkortingsinfo(LocalDate.now(), listOf(), false) + Avkortingsinfo( + LocalDate.now(), + listOf( + AvkortetBeregningsperiode( + LocalDate.now(), + LocalDate.now().plusYears(4), + Kroner(120000), + Kroner(100000), + Kroner(20000), + Kroner(10000), + 40, + Kroner(5000), + Kroner(0), + 40, + Kroner(5000), + BeregningsMetode.NASJONAL, + BeregningsMetode.BEST, + null, + null, + false, + ), + ), + false, + ) } + runBlocking { vedtaksbrevService.opprettVedtaksbrev( sakId, @@ -276,6 +307,7 @@ internal class VedtaksbrevServiceTest { } verify { + db.hentBrevForBehandling(BEHANDLING_ID, Brevtype.VEDTAK) db.opprettBrev(capture(brevSlot), ATTESTANT) brevbaker wasNot Called dokarkivService wasNot Called