diff --git a/src/main/kotlin/no/nav/familie/tilbake/api/DokumentController.kt b/src/main/kotlin/no/nav/familie/tilbake/api/DokumentController.kt index 93e2dee0e..36986ce14 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/api/DokumentController.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/api/DokumentController.kt @@ -97,8 +97,8 @@ class DokumentController( @Rolletilgangssjekk(Behandlerrolle.SAKSBEHANDLER, "Forhåndsviser brev", AuditLoggerEvent.ACCESS) fun hentForhåndsvisningVedtaksbrev( @Valid @RequestBody - dto: HentForhåndvisningVedtaksbrevPdfDto, - ): Ressurs = Ressurs.success(vedtaksbrevService.hentForhåndsvisningVedtaksbrevMedVedleggSomPdf(dto)) + hentForhåndsvisningVedtaksbrevRequest: HentForhåndvisningVedtaksbrevPdfDto, + ): Ressurs = Ressurs.success(vedtaksbrevService.hentForhåndsvisningVedtaksbrevMedVedleggSomPdf(hentForhåndsvisningVedtaksbrevRequest)) @Operation(summary = "Hent vedtaksbrevtekst") @GetMapping( diff --git a/src/main/kotlin/no/nav/familie/tilbake/api/PerioderController.kt b/src/main/kotlin/no/nav/familie/tilbake/api/PerioderController.kt index 8df33b43c..6e5257e2f 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/api/PerioderController.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/api/PerioderController.kt @@ -2,17 +2,21 @@ package no.nav.familie.tilbake.api import io.swagger.v3.oas.annotations.Operation import no.nav.familie.kontrakter.felles.Ressurs -import no.nav.familie.tilbake.faktaomfeilutbetaling.FaktaFeilutbetalingService -import no.nav.familie.tilbake.foreldelse.ForeldelseService +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.tilbake.behandling.FagsakRepository +import no.nav.familie.tilbake.dokumentbestilling.vedtak.PeriodeService +import no.nav.familie.tilbake.dokumentbestilling.vedtak.VedtaksbrevService +import no.nav.familie.tilbake.dokumentbestilling.vedtak.VedtaksbrevsoppsummeringRepository import no.nav.familie.tilbake.sikkerhet.AuditLoggerEvent import no.nav.familie.tilbake.sikkerhet.Behandlerrolle import no.nav.familie.tilbake.sikkerhet.HenteParam import no.nav.familie.tilbake.sikkerhet.Rolletilgangssjekk -import no.nav.familie.tilbake.vilkårsvurdering.VilkårsvurderingService import no.nav.security.token.support.core.api.ProtectedWithClaims +import org.slf4j.LoggerFactory import org.springframework.http.MediaType import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import java.util.UUID @@ -21,10 +25,13 @@ import java.util.UUID @RequestMapping("/api/perioder") @ProtectedWithClaims(issuer = "azuread") class PerioderController( - private val faktaFeilutbetalingService: FaktaFeilutbetalingService, - private val vilkårsVurderingService: VilkårsvurderingService, - private val foreldelseService: ForeldelseService, + private val vedtaksbrevService: VedtaksbrevService, + private val vedtaksbrevsoppsummeringRepository: VedtaksbrevsoppsummeringRepository, + private val fagsakRepository: FagsakRepository, + private val periodeService: PeriodeService, ) { + private val logger = LoggerFactory.getLogger(this::class.java) + @Operation(summary = "Sjekker om perioder er like - unntatt dato og beløp") @GetMapping( "/sjekk-likhet/{behandlingId}", @@ -38,10 +45,53 @@ class PerioderController( ) fun erPerioderLike( @PathVariable behandlingId: UUID, - ): Ressurs = - Ressurs.success( - faktaFeilutbetalingService.sjekkOmFaktaPerioderErLike(behandlingId) && - foreldelseService.sjekkOmForeldelsePerioderErLike(behandlingId) && - vilkårsVurderingService.sjekkOmVilkårsvurderingPerioderErLike(behandlingId), + ): Ressurs { + val erEnsligForsørgerOgPerioderLike = periodeService.erEnsligForsørgerOgPerioderLike(behandlingId) + return Ressurs.success( + erEnsligForsørgerOgPerioderLike, ) + } + + @Operation(summary = "Oppdatere skalSammenslåPerioder") + @PostMapping( + "/sammensla/{behandlingId}", + produces = [MediaType.APPLICATION_JSON_VALUE], + ) + @Rolletilgangssjekk( + Behandlerrolle.SAKSBEHANDLER, + "Oppdatere skalSammenslåPerioder", + AuditLoggerEvent.UPDATE, + HenteParam.BEHANDLING_ID, + ) + fun sammenslå( + @PathVariable behandlingId: UUID, + ): Ressurs { + val behandling = fagsakRepository.finnFagsakForBehandlingId(behandlingId) + if (behandling.ytelsestype.tilTema() != Tema.ENF) { + throw Exception("Kan ikke slå sammen perioder i behandling som ikke er for en enslig forsørger ytelse") + } + vedtaksbrevService.oppdaterSkalSammenslåPerioder(behandlingId, true) + return Ressurs.success("OK") + } + + @Operation(summary = "Angre sammenslå av perioder") + @PostMapping( + "/angre-sammenslaing/{behandlingId}", + produces = [MediaType.APPLICATION_JSON_VALUE], + ) + @Rolletilgangssjekk( + Behandlerrolle.SAKSBEHANDLER, + "Angre sammenslåing av perioder", + AuditLoggerEvent.UPDATE, + HenteParam.BEHANDLING_ID, + ) + fun angreSammenslåing( + @PathVariable behandlingId: UUID, + ): Ressurs { + val vedtaksbrevsoppsummering = vedtaksbrevsoppsummeringRepository.findByBehandlingId(behandlingId) + if (vedtaksbrevsoppsummering != null) { + vedtaksbrevsoppsummeringRepository.update(vedtaksbrevsoppsummering.copy(skalSammenslåPerioder = false)) + } + return Ressurs.success("OK") + } } diff --git "a/src/main/kotlin/no/nav/familie/tilbake/behandling/steg/Vilk\303\245rsvurderingssteg.kt" "b/src/main/kotlin/no/nav/familie/tilbake/behandling/steg/Vilk\303\245rsvurderingssteg.kt" index def29a59e..e60a376c3 100644 --- "a/src/main/kotlin/no/nav/familie/tilbake/behandling/steg/Vilk\303\245rsvurderingssteg.kt" +++ "b/src/main/kotlin/no/nav/familie/tilbake/behandling/steg/Vilk\303\245rsvurderingssteg.kt" @@ -10,6 +10,9 @@ import no.nav.familie.tilbake.behandlingskontroll.domain.Behandlingsstegstatus import no.nav.familie.tilbake.behandlingskontroll.domain.Behandlingsstegstatus.AUTOUTFØRT import no.nav.familie.tilbake.behandlingskontroll.domain.Behandlingsstegstatus.UTFØRT import no.nav.familie.tilbake.common.exceptionhandler.Feil +import no.nav.familie.tilbake.dokumentbestilling.vedtak.PeriodeService +import no.nav.familie.tilbake.dokumentbestilling.vedtak.VedtaksbrevsoppsummeringRepository +import no.nav.familie.tilbake.dokumentbestilling.vedtak.domain.Vedtaksbrevsoppsummering import no.nav.familie.tilbake.foreldelse.ForeldelseService import no.nav.familie.tilbake.historikkinnslag.Aktør import no.nav.familie.tilbake.historikkinnslag.HistorikkTaskService @@ -31,6 +34,8 @@ class Vilkårsvurderingssteg( private val foreldelseService: ForeldelseService, private val historikkTaskService: HistorikkTaskService, private val oppgaveTaskService: OppgaveTaskService, + private val periodeService: PeriodeService, + private val vedtaksbrevsoppsummeringRepository: VedtaksbrevsoppsummeringRepository, ) : IBehandlingssteg { private val logger = LoggerFactory.getLogger(this::class.java) @@ -65,7 +70,7 @@ class Vilkårsvurderingssteg( ) } vilkårsvurderingService.lagreVilkårsvurdering(behandlingId, behandlingsstegDto as BehandlingsstegVilkårsvurderingDto) - + oppdatereVedtaksbrevsoppsummering(behandlingId) oppgaveTaskService.oppdaterAnsvarligSaksbehandlerOppgaveTask(behandlingId) lagHistorikkinnslag(behandlingId, Aktør.SAKSBEHANDLER) @@ -127,4 +132,17 @@ class Vilkårsvurderingssteg( aktør, ) } + + private fun oppdatereVedtaksbrevsoppsummering(behandlingId: UUID) { + val erEnsligForsørgerOgPerioderLike = periodeService.erEnsligForsørgerOgPerioderLike(behandlingId) + val vedtaksbrevsoppsummering = vedtaksbrevsoppsummeringRepository.findByBehandlingId(behandlingId) + + if (vedtaksbrevsoppsummering != null) { + vedtaksbrevsoppsummeringRepository.update(vedtaksbrevsoppsummering.copy(skalSammenslåPerioder = erEnsligForsørgerOgPerioderLike)) + } + + if (erEnsligForsørgerOgPerioderLike && vedtaksbrevsoppsummering == null) { + vedtaksbrevsoppsummeringRepository.insert(Vedtaksbrevsoppsummering(behandlingId = behandlingId, skalSammenslåPerioder = erEnsligForsørgerOgPerioderLike, oppsummeringFritekst = null)) + } + } } diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/Avsnitt.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/Avsnitt.kt index d3abfd139..b292f1f4d 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/Avsnitt.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/Avsnitt.kt @@ -5,6 +5,7 @@ import java.time.LocalDate enum class Avsnittstype { OPPSUMMERING, PERIODE, + SAMMENSLÅTT_PERIODE, TILLEGGSINFORMASJON, } diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/AvsnittUtil.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/AvsnittUtil.kt index eb2752f35..480efa3bf 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/AvsnittUtil.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/AvsnittUtil.kt @@ -1,13 +1,16 @@ package no.nav.familie.tilbake.dokumentbestilling.vedtak +import no.nav.familie.kontrakter.felles.Datoperiode import no.nav.familie.tilbake.dokumentbestilling.handlebars.FellesTekstformaterer import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.HbVedtaksbrevFelles import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.HbVedtaksbrevPeriodeOgFelles import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.HbVedtaksbrevsdata import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.Vedtaksbrevstype +import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.periode.HbVedtaksbrevsperiode internal object AvsnittUtil { const val PARTIAL_PERIODE_FAKTA = "vedtak/periode_fakta" + const val PARTIAL_PERIODE_FAKTA_SAMMENSLÅTT_PERIODER = "vedtak/periode-fakta/periode_fakta_ef_sammenslå_perioder" const val PARTIAL_PERIODE_FORELDELSE = "vedtak/periode_foreldelse" const val PARTIAL_PERIODE_VILKÅR = "vedtak/periode_vilkår" const val PARTIAL_PERIODE_SÆRLIGE_GRUNNER = "vedtak/periode_særlige_grunner" @@ -15,12 +18,13 @@ internal object AvsnittUtil { fun lagVedtaksbrevDeltIAvsnitt( vedtaksbrevsdata: HbVedtaksbrevsdata, hovedoverskrift: String, + skalSammenslåPerioder: Boolean = false, ): List { val resultat: MutableList = ArrayList() val vedtaksbrevsdataMedFriteksmarkeringer = Vedtaksbrevsfritekst.settInnMarkeringForFritekst(vedtaksbrevsdata) resultat.add(lagOppsummeringsavsnitt(vedtaksbrevsdataMedFriteksmarkeringer, hovedoverskrift)) if (vedtaksbrevsdata.felles.vedtaksbrevstype == Vedtaksbrevstype.ORDINÆR) { - resultat.addAll(lagPerioderavsnitt(vedtaksbrevsdataMedFriteksmarkeringer)) + resultat.addAll(lagPerioderavsnitt(vedtaksbrevsdataMedFriteksmarkeringer, skalSammenslåPerioder)) } resultat.add(lagAvsluttendeAvsnitt(vedtaksbrevsdataMedFriteksmarkeringer)) return resultat @@ -45,10 +49,18 @@ internal object AvsnittUtil { return FellesTekstformaterer.lagDeltekst(vedtaksbrevFelles, filsti) } - private fun lagPerioderavsnitt(vedtaksbrevsdata: HbVedtaksbrevsdata): List = - vedtaksbrevsdata.perioder.map { - lagPeriodeAvsnitt(HbVedtaksbrevPeriodeOgFelles(vedtaksbrevsdata.felles, it)) + private fun lagPerioderavsnitt( + vedtaksbrevsdata: HbVedtaksbrevsdata, + skalSammenslåPerioder: Boolean, + ): List { + if (skalSammenslåPerioder) { + return listOf(lagSammenslåttPeriodeAvsnitt(vedtaksbrevsdata)) + } else { + return vedtaksbrevsdata.perioder.map { + lagPeriodeAvsnitt(HbVedtaksbrevPeriodeOgFelles(vedtaksbrevsdata.felles, it)) + } } + } private fun lagAvsluttendeAvsnitt(vedtaksbrevsdata: HbVedtaksbrevsdata): Avsnitt { val tekst = FellesTekstformaterer.lagDeltekst(vedtaksbrevsdata, "vedtak/vedtak_slutt") @@ -79,6 +91,41 @@ internal object AvsnittUtil { return avsnitt } + private fun lagSammenslåttPeriodeAvsnitt(vedtaksbrevsdata: HbVedtaksbrevsdata): Avsnitt { + val førstePeriode = vedtaksbrevsdata.perioder.first() + val sammenslåttDatoperiode = + Datoperiode( + førstePeriode.periode.fom, + vedtaksbrevsdata.perioder + .last() + .periode.tom, + ) + val hbVedtaksbrevsperiode = HbVedtaksbrevsperiode(sammenslåttDatoperiode, førstePeriode.kravgrunnlag, førstePeriode.fakta, førstePeriode.vurderinger, førstePeriode.resultat, true, førstePeriode.grunnbeløp) + val hbVedtaksbrevPeriodeOgFelles = HbVedtaksbrevPeriodeOgFelles(vedtaksbrevsdata.felles, hbVedtaksbrevsperiode) + + var avsnitt = + Avsnitt( + avsnittstype = Avsnittstype.SAMMENSLÅTT_PERIODE, + overskrift = "Perioder som er feilutbetalt", + fom = førstePeriode.periode.fom, + tom = førstePeriode.periode.tom, + ) + + val faktatekst = FellesTekstformaterer.lagDeltekst(vedtaksbrevsdata, PARTIAL_PERIODE_FAKTA_SAMMENSLÅTT_PERIODER) + val foreldelsestekst = FellesTekstformaterer.lagDeltekst(hbVedtaksbrevPeriodeOgFelles, PARTIAL_PERIODE_FORELDELSE) + val vilkårstekst = FellesTekstformaterer.lagDeltekst(hbVedtaksbrevPeriodeOgFelles, PARTIAL_PERIODE_VILKÅR) + val særligeGrunnerstekst = FellesTekstformaterer.lagDeltekst(hbVedtaksbrevPeriodeOgFelles, PARTIAL_PERIODE_SÆRLIGE_GRUNNER) + val avsluttendeTekst = FellesTekstformaterer.lagDeltekst(hbVedtaksbrevPeriodeOgFelles, "vedtak/periode_slutt") + + avsnitt = parseTekst(faktatekst, avsnitt, Underavsnittstype.FAKTA) + avsnitt = parseTekst(foreldelsestekst, avsnitt, Underavsnittstype.FORELDELSE) + avsnitt = parseTekst(vilkårstekst, avsnitt, Underavsnittstype.VILKÅR) + avsnitt = parseTekst(særligeGrunnerstekst, avsnitt, Underavsnittstype.SÆRLIGEGRUNNER) + avsnitt = parseTekst(avsluttendeTekst, avsnitt, null) + + return avsnitt + } + fun parseTekst( generertTekst: String, avsnitt: Avsnitt, diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/PeriodeService.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/PeriodeService.kt new file mode 100644 index 000000000..21d9de7c4 --- /dev/null +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/PeriodeService.kt @@ -0,0 +1,27 @@ +package no.nav.familie.tilbake.dokumentbestilling.vedtak + +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.tilbake.behandling.FagsakRepository +import no.nav.familie.tilbake.faktaomfeilutbetaling.FaktaFeilutbetalingService +import no.nav.familie.tilbake.foreldelse.ForeldelseService +import no.nav.familie.tilbake.vilkårsvurdering.VilkårsvurderingService +import org.springframework.stereotype.Service +import java.util.UUID + +@Service +class PeriodeService( + private val faktaFeilutbetalingService: FaktaFeilutbetalingService, + private val foreldelseService: ForeldelseService, + private val vilkårsvurderingService: VilkårsvurderingService, + private val fagsakRepository: FagsakRepository, +) { + fun erEnsligForsørgerOgPerioderLike(behandlingId: UUID): Boolean { + val fagsak = fagsakRepository.finnFagsakForBehandlingId(behandlingId) + return erPerioderLike(behandlingId) && fagsak.ytelsestype.tilTema() == Tema.ENF + } + + private fun erPerioderLike(behandlingId: UUID) = + faktaFeilutbetalingService.sjekkOmFaktaPerioderErLike(behandlingId) && + foreldelseService.sjekkOmForeldelsePerioderErLike(behandlingId) && + vilkårsvurderingService.sjekkOmVilkårsvurderingPerioderErLike(behandlingId) +} diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/TekstformatererVedtaksbrev.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/TekstformatererVedtaksbrev.kt index d26ad9758..75caceef7 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/TekstformatererVedtaksbrev.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/TekstformatererVedtaksbrev.kt @@ -7,11 +7,18 @@ import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.Vedtaksbr internal object TekstformatererVedtaksbrev { fun lagVedtaksbrevsfritekst( vedtaksbrevsdata: HbVedtaksbrevsdata, + skalSammenslåPerioder: Boolean = false, + erPerioderLike: Boolean = false, ): String = when (vedtaksbrevsdata.felles.vedtaksbrevstype) { Vedtaksbrevstype.FRITEKST_FEILUTBETALING_BORTFALT -> lagVedtaksbrev("vedtak/fritekstFeilutbetalingBortfalt/fritekstFeilutbetalingBortfalt", vedtaksbrevsdata) - Vedtaksbrevstype.ORDINÆR -> lagVedtaksbrev("vedtak/vedtak", vedtaksbrevsdata) + Vedtaksbrevstype.ORDINÆR -> + if (skalSammenslåPerioder && erPerioderLike) { + lagVedtaksbrev("vedtak/vedtak_sammenslå_perioder", vedtaksbrevsdata) + } else { + lagVedtaksbrev("vedtak/vedtak", vedtaksbrevsdata) + } Vedtaksbrevstype.AUTOMATISK_4X_RETTSGEBYR -> lagVedtaksbrev("vedtak/vedtak_feilutbetaling_under_4x_rettsgebyr", vedtaksbrevsdata) } diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstMapper.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstMapper.kt index 105c3711d..28fea529b 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstMapper.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstMapper.kt @@ -11,10 +11,12 @@ object VedtaksbrevFritekstMapper { fun tilDomene( behandlingId: UUID, oppsummeringstekst: String?, + skalSammenslåPerioder: Boolean, ): Vedtaksbrevsoppsummering = Vedtaksbrevsoppsummering( behandlingId = behandlingId, oppsummeringFritekst = oppsummeringstekst, + skalSammenslåPerioder = skalSammenslåPerioder, ) fun tilDomeneVedtaksbrevsperiode( diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstValidator.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstValidator.kt index a470e5aba..5be9e7494 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstValidator.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevFritekstValidator.kt @@ -38,6 +38,7 @@ object VedtaksbrevFritekstValidator { it, vedtaksbrevFritekstPerioder, validerPåkrevetFritekster, + vedtaksbrevsoppsummering.skalSammenslåPerioder, ) } } @@ -48,6 +49,7 @@ object VedtaksbrevFritekstValidator { vedtaksbrevFritekstPerioder, avsnittMedPerioder, validerPåkrevetFritekster, + vedtaksbrevsoppsummering.skalSammenslåPerioder, ) } validerOppsummeringsfritekstLengde(behandling, vedtaksbrevsoppsummering, vedtaksbrevstype) @@ -127,9 +129,12 @@ object VedtaksbrevFritekstValidator { vedtaksbrevFritekstPerioder: List, avsnittMedPerioder: List, validerPåkrevetFritekster: Boolean, + skalSammenslåPerioder: Boolean, ) { - faktaFeilutbetaling.perioder - .filter { Hendelsesundertype.ANNET_FRITEKST == it.hendelsesundertype } + val faktaPerioderMedFritekst = faktaFeilutbetaling.perioder.filter { Hendelsesundertype.ANNET_FRITEKST == it.hendelsesundertype }.sortedBy { it.periode } + val validerPerioder = if (skalSammenslåPerioder && faktaPerioderMedFritekst.isNotEmpty()) listOf(faktaPerioderMedFritekst.first()) else faktaPerioderMedFritekst + + validerPerioder .forEach { faktaFeilutbetalingsperiode -> val perioder = finnFritekstPerioder( @@ -165,13 +170,24 @@ object VedtaksbrevFritekstValidator { vilkårsvurdering: Vilkårsvurdering, vedtaksbrevFritekstPerioder: List, validerPåkrevetFritekster: Boolean, + skalSammenslåPerioder: Boolean, ) { - vilkårsvurdering.perioder - .filter { - it.aktsomhet?.vilkårsvurderingSærligeGrunner != null && - it.aktsomhet.vilkårsvurderingSærligeGrunner - .any { særligGrunn -> SærligGrunn.ANNET == særligGrunn.særligGrunn } - }.forEach { + val perioderMedSærligeGrunner = + vilkårsvurdering.perioder + .filter { + it.aktsomhet?.vilkårsvurderingSærligeGrunner != null && + it.aktsomhet.vilkårsvurderingSærligeGrunner.any { særligGrunn -> SærligGrunn.ANNET == særligGrunn.særligGrunn } + }.sortedBy { it.periode } + + val validerPerioder = + if (skalSammenslåPerioder && perioderMedSærligeGrunner.isNotEmpty()) { + setOf(perioderMedSærligeGrunner.first()) + } else { + perioderMedSærligeGrunner + } + + validerPerioder + .forEach { val perioder = finnFritekstPerioder( vedtaksbrevFritekstPerioder, diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevService.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevService.kt index 461ab9080..06828e655 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevService.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevService.kt @@ -3,7 +3,6 @@ package no.nav.familie.tilbake.dokumentbestilling.vedtak import no.nav.familie.tilbake.api.dto.FritekstavsnittDto import no.nav.familie.tilbake.api.dto.HentForhåndvisningVedtaksbrevPdfDto import no.nav.familie.tilbake.behandling.BehandlingRepository -import no.nav.familie.tilbake.behandling.FagsakRepository import no.nav.familie.tilbake.behandling.domain.Behandling import no.nav.familie.tilbake.common.repository.findByIdOrThrow import no.nav.familie.tilbake.config.FeatureToggleConfig @@ -11,6 +10,7 @@ import no.nav.familie.tilbake.config.FeatureToggleService import no.nav.familie.tilbake.dokumentbestilling.DistribusjonshåndteringService import no.nav.familie.tilbake.dokumentbestilling.felles.domain.Brevtype import no.nav.familie.tilbake.dokumentbestilling.felles.pdf.PdfBrevService +import no.nav.familie.tilbake.dokumentbestilling.vedtak.domain.Vedtaksbrevsoppsummering import no.nav.familie.tilbake.faktaomfeilutbetaling.FaktaFeilutbetalingRepository import no.nav.familie.tilbake.vilkårsvurdering.VilkårsvurderingRepository import org.springframework.stereotype.Service @@ -24,12 +24,12 @@ class VedtaksbrevService( private val vedtaksbrevgrunnlagService: VedtaksbrevgunnlagService, private val faktaRepository: FaktaFeilutbetalingRepository, private val vilkårsvurderingRepository: VilkårsvurderingRepository, - private val fagsakRepository: FagsakRepository, private val vedtaksbrevsoppsummeringRepository: VedtaksbrevsoppsummeringRepository, private val vedtaksbrevsperiodeRepository: VedtaksbrevsperiodeRepository, private val pdfBrevService: PdfBrevService, private val distribusjonshåndteringService: DistribusjonshåndteringService, private val featureToggleService: FeatureToggleService, + private val periodeService: PeriodeService, ) { fun sendVedtaksbrev( behandling: Behandling, @@ -41,19 +41,24 @@ class VedtaksbrevService( } } - fun hentForhåndsvisningVedtaksbrevMedVedleggSomPdf(dto: HentForhåndvisningVedtaksbrevPdfDto): ByteArray { - val vedtaksbrevgrunnlag = vedtaksbrevgrunnlagService.hentVedtaksbrevgrunnlag(dto.behandlingId) - val brevdata = vedtaksbrevgeneratorService.genererVedtaksbrevForForhåndsvisning(vedtaksbrevgrunnlag, dto) + fun hentForhåndsvisningVedtaksbrevMedVedleggSomPdf(hentForhåndvisningVedtaksbrevPdfDto: HentForhåndvisningVedtaksbrevPdfDto): ByteArray { + val vedtaksbrevgrunnlag = vedtaksbrevgrunnlagService.hentVedtaksbrevgrunnlag(hentForhåndvisningVedtaksbrevPdfDto.behandlingId) + val brevdata = vedtaksbrevgeneratorService.genererVedtaksbrevForForhåndsvisning(vedtaksbrevgrunnlag, hentForhåndvisningVedtaksbrevPdfDto) return pdfBrevService.genererForhåndsvisning(brevdata) } - fun hentVedtaksbrevSomTekst(behandlingId: UUID): List { + fun hentVedtaksbrevSomTekst( + behandlingId: UUID, + ): List { val vedtaksbrevgrunnlag = vedtaksbrevgrunnlagService.hentVedtaksbrevgrunnlag(behandlingId) - + val vedtaksbrevsoppsummering = vedtaksbrevsoppsummeringRepository.findByBehandlingId(behandlingId) + val skalSammenslåPerioder = + vedtaksbrevsoppsummering?.skalSammenslåPerioder + ?: periodeService.erEnsligForsørgerOgPerioderLike(behandlingId) val hbVedtaksbrevsdata = vedtaksbrevgeneratorService.genererVedtaksbrevsdataTilVisningIFrontendSkjema(vedtaksbrevgrunnlag) val hovedoverskrift = TekstformatererVedtaksbrev.lagVedtaksbrevsoverskrift(hbVedtaksbrevsdata) - return AvsnittUtil.lagVedtaksbrevDeltIAvsnitt(hbVedtaksbrevsdata, hovedoverskrift) + return AvsnittUtil.lagVedtaksbrevDeltIAvsnitt(hbVedtaksbrevsdata, hovedoverskrift, skalSammenslåPerioder) } @Transactional @@ -79,7 +84,9 @@ class VedtaksbrevService( ) { val behandling = behandlingRepository.findByIdOrThrow(behandlingId) val vedtaksbrevstype = behandling.utledVedtaksbrevstype() - val vedtaksbrevsoppsummering = VedtaksbrevFritekstMapper.tilDomene(behandlingId, fritekstavsnittDto.oppsummeringstekst) + val skalSammenslåPerioder = vedtaksbrevsoppsummeringRepository.findByBehandlingId(behandlingId)?.skalSammenslåPerioder ?: false + val vedtaksbrevsoppsummering = VedtaksbrevFritekstMapper.tilDomene(behandlingId, fritekstavsnittDto.oppsummeringstekst, skalSammenslåPerioder) + val vedtaksbrevsperioder = VedtaksbrevFritekstMapper .tilDomeneVedtaksbrevsperiode(behandlingId, fritekstavsnittDto.perioderMedTekst) @@ -120,4 +127,17 @@ class VedtaksbrevService( ?.let { vedtaksbrevsoppsummeringRepository.deleteById(it.id) } vedtaksbrevsperiodeRepository.findByBehandlingId(behandlingId).forEach { vedtaksbrevsperiodeRepository.deleteById(it.id) } } + + @Transactional + fun oppdaterSkalSammenslåPerioder( + behandlingId: UUID, + skalSammenslåPerioder: Boolean, + ) { + val vedtaksbrevsoppsummering = vedtaksbrevsoppsummeringRepository.findByBehandlingId(behandlingId) + if (vedtaksbrevsoppsummering != null) { + vedtaksbrevsoppsummeringRepository.update(vedtaksbrevsoppsummering.copy(skalSammenslåPerioder = skalSammenslåPerioder)) + } else { + vedtaksbrevsoppsummeringRepository.insert(Vedtaksbrevsoppsummering(behandlingId = behandlingId, oppsummeringFritekst = "", skalSammenslåPerioder = skalSammenslåPerioder)) + } + } } diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevgeneratorService.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevgeneratorService.kt index 70d5c4a50..9c102df07 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevgeneratorService.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevgeneratorService.kt @@ -38,14 +38,17 @@ import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.periode.H import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.periode.HbSærligeGrunner import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.periode.HbVedtaksbrevsperiode import no.nav.familie.tilbake.dokumentbestilling.vedtak.handlebars.dto.periode.HbVurderinger +import no.nav.familie.tilbake.faktaomfeilutbetaling.FaktaFeilutbetalingService import no.nav.familie.tilbake.faktaomfeilutbetaling.domain.FaktaFeilutbetaling import no.nav.familie.tilbake.faktaomfeilutbetaling.domain.HarBrukerUttaltSeg import no.nav.familie.tilbake.faktaomfeilutbetaling.domain.Hendelsesundertype +import no.nav.familie.tilbake.foreldelse.ForeldelseService import no.nav.familie.tilbake.foreldelse.domain.Foreldelsesperiode import no.nav.familie.tilbake.foreldelse.domain.Foreldelsesvurderingstype import no.nav.familie.tilbake.foreldelse.domain.VurdertForeldelse import no.nav.familie.tilbake.integration.pdl.internal.Personinfo import no.nav.familie.tilbake.organisasjon.OrganisasjonService +import no.nav.familie.tilbake.vilkårsvurdering.VilkårsvurderingService import no.nav.familie.tilbake.vilkårsvurdering.domain.AnnenVurdering import no.nav.familie.tilbake.vilkårsvurdering.domain.Vilkårsvurderingsperiode import org.apache.commons.text.WordUtils @@ -58,18 +61,30 @@ class VedtaksbrevgeneratorService( private val eksterneDataForBrevService: EksterneDataForBrevService, private val organisasjonService: OrganisasjonService, private val brevmetadataUtil: BrevmetadataUtil, + private val faktaFeilutbetalingService: FaktaFeilutbetalingService, + private val vilkårsVurderingService: VilkårsvurderingService, + private val foreldelseService: ForeldelseService, + private val periodeService: PeriodeService, ) { fun genererVedtaksbrevForSending( vedtaksbrevgrunnlag: Vedtaksbrevgrunnlag, brevmottager: Brevmottager, forhåndsgenerertMetadata: Brevmetadata? = null, ): Brevdata { + val behandlingId = vedtaksbrevgrunnlag.behandling.id val vedtaksbrevsdata = hentDataForVedtaksbrev(vedtaksbrevgrunnlag, brevmottager, forhåndsgenerertMetadata) val hbVedtaksbrevsdata: HbVedtaksbrevsdata = vedtaksbrevsdata.vedtaksbrevsdata + val erEnsligForsørgerOgPerioderLike = periodeService.erEnsligForsørgerOgPerioderLike(behandlingId) + + val skalSammenslåPerioder = + vedtaksbrevgrunnlag.behandlinger + .first { it.id == vedtaksbrevgrunnlag.behandling.id } + .vedtaksbrevOppsummering + ?.skalSammenslåPerioder ?: erEnsligForsørgerOgPerioderLike val data = Fritekstbrevsdata( TekstformatererVedtaksbrev.lagVedtaksbrevsoverskrift(hbVedtaksbrevsdata), - TekstformatererVedtaksbrev.lagVedtaksbrevsfritekst(hbVedtaksbrevsdata), + TekstformatererVedtaksbrev.lagVedtaksbrevsfritekst(hbVedtaksbrevsdata, skalSammenslåPerioder, erEnsligForsørgerOgPerioderLike), vedtaksbrevsdata.metadata, ) val vedleggHtml = @@ -89,15 +104,21 @@ class VedtaksbrevgeneratorService( fun genererVedtaksbrevForForhåndsvisning( vedtaksbrevgrunnlag: Vedtaksbrevgrunnlag, - dto: HentForhåndvisningVedtaksbrevPdfDto, + hentForhåndvisningVedtaksbrevPdfDto: HentForhåndvisningVedtaksbrevPdfDto, ): Brevdata { + val behandlingId = vedtaksbrevgrunnlag.behandling.id + + val erEnsligForsørgerOgPerioderLike = periodeService.erEnsligForsørgerOgPerioderLike(behandlingId) + + val skalSammenslåPerioder = vedtaksbrevgrunnlag.behandling.vedtaksbrevOppsummering?.skalSammenslåPerioder ?: erEnsligForsørgerOgPerioderLike + val (brevmetadata, brevmottager) = brevmetadataUtil.lagBrevmetadataForMottakerTilForhåndsvisning(vedtaksbrevgrunnlag) val vedtaksbrevsdata = hentDataForVedtaksbrev( vedtaksbrevgrunnlag, - dto.oppsummeringstekst, - dto.perioderMedTekst, + hentForhåndvisningVedtaksbrevPdfDto.oppsummeringstekst, + hentForhåndvisningVedtaksbrevPdfDto.perioderMedTekst, brevmottager, brevmetadata, ) @@ -109,12 +130,11 @@ class VedtaksbrevgeneratorService( } else { "" } - return Brevdata( mottager = brevmottager, metadata = vedtaksbrevsdata.metadata, overskrift = TekstformatererVedtaksbrev.lagVedtaksbrevsoverskrift(hbVedtaksbrevsdata), - brevtekst = TekstformatererVedtaksbrev.lagVedtaksbrevsfritekst(hbVedtaksbrevsdata), + brevtekst = TekstformatererVedtaksbrev.lagVedtaksbrevsfritekst(hbVedtaksbrevsdata, skalSammenslåPerioder, erEnsligForsørgerOgPerioderLike), vedleggHtml = vedleggHtml, ) } diff --git a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/domain/Vedtaksbrevsoppsummering.kt b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/domain/Vedtaksbrevsoppsummering.kt index e45fd7d1b..122da3d4d 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/domain/Vedtaksbrevsoppsummering.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/domain/Vedtaksbrevsoppsummering.kt @@ -3,6 +3,7 @@ package no.nav.familie.tilbake.dokumentbestilling.vedtak.domain import no.nav.familie.tilbake.common.repository.Sporbar import org.springframework.data.annotation.Id import org.springframework.data.annotation.Version +import org.springframework.data.relational.core.mapping.Column import org.springframework.data.relational.core.mapping.Embedded import java.util.UUID @@ -11,6 +12,8 @@ data class Vedtaksbrevsoppsummering( val id: UUID = UUID.randomUUID(), val behandlingId: UUID, val oppsummeringFritekst: String?, + @Column("skal_sammenslaa_perioder") + val skalSammenslåPerioder: Boolean, @Version val versjon: Long = 0, @Embedded(onEmpty = Embedded.OnEmpty.USE_EMPTY) diff --git a/src/main/kotlin/no/nav/familie/tilbake/faktaomfeilutbetaling/FaktaFeilutbetalingService.kt b/src/main/kotlin/no/nav/familie/tilbake/faktaomfeilutbetaling/FaktaFeilutbetalingService.kt index 8c8568ca8..866ca0806 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/faktaomfeilutbetaling/FaktaFeilutbetalingService.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/faktaomfeilutbetaling/FaktaFeilutbetalingService.kt @@ -86,7 +86,6 @@ class FaktaFeilutbetalingService( ) } - @Transactional fun sjekkOmFaktaPerioderErLike( behandlingId: UUID, ): Boolean { diff --git a/src/main/kotlin/no/nav/familie/tilbake/foreldelse/ForeldelseService.kt b/src/main/kotlin/no/nav/familie/tilbake/foreldelse/ForeldelseService.kt index e96e4b71f..1bc3d0773 100644 --- a/src/main/kotlin/no/nav/familie/tilbake/foreldelse/ForeldelseService.kt +++ b/src/main/kotlin/no/nav/familie/tilbake/foreldelse/ForeldelseService.kt @@ -5,6 +5,9 @@ import no.nav.familie.tilbake.api.dto.BehandlingsstegForeldelseDto import no.nav.familie.tilbake.api.dto.ForeldelsesperiodeDto import no.nav.familie.tilbake.api.dto.VurdertForeldelseDto import no.nav.familie.tilbake.behandling.BehandlingRepository +import no.nav.familie.tilbake.behandlingskontroll.BehandlingsstegstilstandRepository +import no.nav.familie.tilbake.behandlingskontroll.domain.Behandlingssteg +import no.nav.familie.tilbake.behandlingskontroll.domain.Behandlingsstegstatus import no.nav.familie.tilbake.beregning.KravgrunnlagsberegningUtil import no.nav.familie.tilbake.common.repository.findByIdOrThrow import no.nav.familie.tilbake.config.Constants @@ -24,6 +27,7 @@ class ForeldelseService( private val kravgrunnlagRepository: KravgrunnlagRepository, private val vilkårsvurderingRepository: VilkårsvurderingRepository, private val behandlingRepository: BehandlingRepository, + private val behandlingsstegstilstandRepository: BehandlingsstegstilstandRepository, ) { fun hentVurdertForeldelse(behandlingId: UUID): VurdertForeldelseDto { val vurdertForeldelse: VurdertForeldelse? = foreldelseRepository.findByBehandlingIdAndAktivIsTrue(behandlingId) @@ -102,6 +106,10 @@ class ForeldelseService( } fun sjekkOmForeldelsePerioderErLike(behandlingId: UUID): Boolean { + val behandlingssteg = behandlingsstegstilstandRepository.findByBehandlingIdAndBehandlingssteg(behandlingId, Behandlingssteg.FORELDELSE) + if (behandlingssteg?.behandlingsstegsstatus == Behandlingsstegstatus.AUTOUTFØRT) { + return true + } val vurdertForeldelse: VurdertForeldelse? = foreldelseRepository.findByBehandlingIdAndAktivIsTrue(behandlingId) val førstePeriode = vurdertForeldelse?.foreldelsesperioder?.firstOrNull() ?: return false diff --git "a/src/main/kotlin/no/nav/familie/tilbake/vilk\303\245rsvurdering/Vilk\303\245rsvurderingService.kt" "b/src/main/kotlin/no/nav/familie/tilbake/vilk\303\245rsvurdering/Vilk\303\245rsvurderingService.kt" index bf0e4b589..9c11de2da 100644 --- "a/src/main/kotlin/no/nav/familie/tilbake/vilk\303\245rsvurdering/Vilk\303\245rsvurderingService.kt" +++ "b/src/main/kotlin/no/nav/familie/tilbake/vilk\303\245rsvurdering/Vilk\303\245rsvurderingService.kt" @@ -159,7 +159,6 @@ class VilkårsvurderingService( } } - @Transactional fun sjekkOmVilkårsvurderingPerioderErLike( behandlingId: UUID, ): Boolean { diff --git "a/src/main/resources/db/migration/V40__vedtaksbrevsoppsummering_legg_til_skal_sammensl\303\245_perioder.sql" "b/src/main/resources/db/migration/V40__vedtaksbrevsoppsummering_legg_til_skal_sammensl\303\245_perioder.sql" new file mode 100644 index 000000000..97ac8d448 --- /dev/null +++ "b/src/main/resources/db/migration/V40__vedtaksbrevsoppsummering_legg_til_skal_sammensl\303\245_perioder.sql" @@ -0,0 +1,2 @@ +ALTER TABLE vedtaksbrevsoppsummering + ADD COLUMN skal_sammenslaa_perioder BOOLEAN NOT NULL DEFAULT FALSE; diff --git "a/src/main/resources/templates/nb/vedtak/periode-fakta/periode_fakta_ef_sammensl\303\245_perioder.hbs" "b/src/main/resources/templates/nb/vedtak/periode-fakta/periode_fakta_ef_sammensl\303\245_perioder.hbs" new file mode 100644 index 000000000..1d067afd5 --- /dev/null +++ "b/src/main/resources/templates/nb/vedtak/periode-fakta/periode_fakta_ef_sammensl\303\245_perioder.hbs" @@ -0,0 +1,223 @@ +{{> nb/vedtak/periode-fakta/periode_fakta_felles}} +*-{{#each perioder }} +Fra og med {{{dato periode.fom}}} til og med {{{dato periode.tom}}}{{/each}}-* +{{#with perioder.[0] as |periode|}} +{{#switch fakta.hendelsestype}} + {{#case "ANNET"}} + {{#switch fakta.hendelsesundertype}} + {{#case "ANNET_FRITEKST"}} + {{/case}} + {{/switch}} + {{/case}} + {{#case "DØDSFALL"}} + {{> fakta-død}} + {{/case}} + {{#case "MEDLEMSKAP"}} + {{#switch fakta.hendelsesundertype}} + {{#case "MEDLEM_SISTE_5_ÅR" }} + Du har ikke vært medlem i folketrygden i de siste 5 årene før du søkte om {{{ytelsesnavnUbestemt}}}. Derfor har du ikke rett til stønaden. + {{/case}} + {{#case "LOVLIG_OPPHOLD" }} + Du er ikke medlem av folketrygden fordi du ikke har oppholdstillatelse i Norge. Derfor har du ikke rett til {{{ytelsesnavnUbestemt}}}. + {{/case}} + {{/switch}} + {{/case}} + {{#case "OPPHOLD_I_NORGE"}} + {{#switch fakta.hendelsesundertype}} + {{#case "BRUKER_IKKE_OPPHOLD_I_NORGE" }} + Du har fått {{{ytelsesnavnUbestemt}}} uten at du har oppholdt deg i Norge. + {{/case}} + {{#case "BARN_IKKE_OPPHOLD_I_NORGE" }} + Du har fått {{{ytelsesnavnUbestemt}}} for barn som ikke har oppholdt seg i Norge. + {{/case}} + {{#case "BRUKER_FLYTTET_FRA_NORGE" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at du flyttet fra Norge. + {{/case}} + {{#case "BARN_FLYTTET_FRA_NORGE" }} + Du har fått {{{ytelsesnavnUbestemt}}} for barn som har flyttet fra Norge. + {{/case}} + {{#case "OPPHOLD_UTLAND_6_UKER_ELLER_MER" }} + Du har oppholdt deg i utlandet i mer enn 6 uker i løpet av de siste 12 måneder. Derfor har du ikke rett til {{{ytelsesnavnUbestemt}}}. + {{/case}} + {{/switch}} + {{/case}} + {{#case "ENSLIG_FORSØRGER"}} + {{#switch fakta.hendelsesundertype}} + {{#case "UGIFT" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at du giftet deg. Du har ikke rett på {{{ytelsesnavnUbestemt}}} når du er gift. + {{/case}} + {{#case "SEPARERT_SKILT" }} + Du har fått {{{ytelsesnavnUbestemt}}} uten at det foreligger en formell separasjon eller skilsmisse. + {{/case}} + {{#case "SAMBOER" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at du ble samboer. + {{/case}} + {{#case "NYTT_BARN_SAMME_PARTNER" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at du fikk nytt barn med samme partner. + {{/case}} + {{#case "ENDRET_SAMVÆRSORDNING" }} + Du har mottatt {{{ytelsesnavnUbestemt}}} etter at samværsordningen er endret slik at du ikke lenger har klart mer av den daglige omsorgen. + {{/case}} + {{#case "BARN_FLYTTET" }} + Du har fått {{{ytelsesnavnUbestemt}}} for barn som ikke bor fast hos deg. + {{/case}} + {{#case "NÆRE_BOFORHOLD" }} + Du og den andre av barnets foreldre bor nære hverandre og du har ikke klart mer av den daglige omsorgen. Derfor har du ikke rett til {{{ytelsesnavnBestemt}}}. + {{/case}} + {{#case "FORELDRE_LEVER_SAMMEN" }} + Du har fått {{{ytelsesnavnUbestemt}}} samtidig som du lever sammen med den andre av barnets foreldre. + {{/case}} + {{/switch}} + {{/case}} + {{#case "OVERGANGSSTØNAD"}} + {{#switch fakta.hendelsesundertype}} + {{#case "BARN_8_ÅR" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at ditt yngste barn fylte åtte år. + {{/case}} + {{/switch}} + {{/case}} + {{#case "YRKESRETTET_AKTIVITET"}} + {{#switch fakta.hendelsesundertype}} + {{#case "ARBEID" }} + Du har fått {{{ytelsesnavnUbestemt}}} uten at du har vært i arbeid som utgjør minst halvparten av full tid. + {{/case}} + {{#case "REELL_ARBEIDSSØKER" }} + Du har fått {{{ytelsesnavnUbestemt}}} som reell arbeidssøker. Du har ikke stått tilmeldt NAV eller sendt meldekort til rett tid. + {{/case}} + {{#case "UTDANNING" }} + Du har fått {{{ytelsesnavnUbestemt}}} uten å ha vært i utdanning som utgjør minst halvparten av full tid. + {{/case}} + {{#case "ETABLERER_EGEN_VIRKSOMHET" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at du avsluttet etableringen av egen virksomhet. + {{/case}} + {{#case "BARN_FYLT_1_ÅR" }} + Du har fått {{{ytelsesnavnUbestemt}}} etter at barnet ditt fylte 1 år uten at du har fylt aktivitetsplikten. + {{/case}} + {{/switch}} + {{/case}} + {{#case "STØNADSPERIODE"}} + {{#switch fakta.hendelsesundertype}} + {{#case "HOVEDPERIODE_3_ÅR" }} + Du har fått {{{ytelsesnavnUbestemt}}} i mer enn tre år og fyller ikke vilkårene for utvidelse av stønadsperioden. + {{/case}} + {{#case "UTVIDELSE_UTDANNING" }} + Du har fått {{{ytelsesnavnUbestemt}}} uten å ha vært i utdanning som utgjør minst halvparten av full tid. + {{/case}} + {{#case "UTVIDELSE_SÆRLIG_TILSYNSKREVENDE_BARN" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du har et særlig tilsynskrevende barn som hindret deg fra å være i arbeid. Du er ikke lenger forhindret fra å arbeide. Derfor har du ikke rett til {{{ytelsesnavnUbestemt}}}. + {{/case}} + {{#case "UTVIDELSE_FORBIGÅENDE_SYKDOM" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} uten at du eller barnet hadde en forbigående sykdom som hindret deg i å arbeide. + {{/case}} + {{#case "PÅVENTE_AV_SKOLESTART_STARTET_IKKE" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du skulle starte på skole. Fordi du ikke startet på skolen, har du ikke rett på stønaden. + {{/case}} + {{#case "PÅVENTE_SKOLESTART_STARTET_TIDLIGERE" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du skulle starte på skole. Du har startet på skole og har ikke lenger rett til stønaden. + {{/case}} + {{#case "PÅVENTE_ARBEIDSTILBUD_STARTET_IKKE" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du ventet på å begynne i en konkret jobb. Du skal ikke lenger starte i denne jobben. + {{/case}} + {{#case "PÅVENTE_ARBEIDSTILBUD_STARTET_TIDLIGERE" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du ventet på å begynne i en konkret jobb. Du har begynt å arbeide. + {{/case}} + {{#case "PÅVENTE_BARNETILSYN_IKKE_HA_TILSYN" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du ventet på barnetilsyn. Fordi barnet ikke lenger skal ha en tilsynsordning, har du ikke rett til stønaden. + {{/case}} + {{#case "PÅVENTE_BARNETILSYN_STARTET_TIDLIGERE" }} + Du har fått forlenget {{{ytelsesnavnUbestemt}}} fordi du ventet på barnetilsyn. Fordi barnet har startet i en tilsynsordning, har du ikke lenger rett på stønaden. + {{/case}} + {{#case "ARBEIDSSØKER" }} + Du har fått {{{ytelsesnavnUbestemt}}} fordi du meldte deg som arbeidssøker. Fordi du ikke er reell arbeidssøker lenger, har du ikke rett på stønaden. + {{/case}} + {{/switch}} + {{/case}} + {{#case "INNTEKT"}} + {{#switch fakta.hendelsesundertype}} + {{#case "ARBEIDSINNTEKT_FÅTT_INNTEKT" }} + Du har hatt arbeidsinntekt uten at {{{ytelsesnavnBestemt}}} har blitt redusert. + {{/case}} + {{#case "ARBEIDSINNTEKT_ENDRET_INNTEKT" }} + Du har fått {{{ytelsesnavnBestemt}}} redusert etter arbeidsinntekt. Arbeidsinntekten din har økt med 10 prosent eller mer. + {{/case}} + {{#case "ANDRE_FOLKETRYGDYTELSER" }} + Du har mottatt andre folketrygdytelser som regnes som arbeidsinntekt, uten at {{{ytelsesnavnBestemt}}} har blitt redusert. + {{/case}} + {{#case "SELVSTENDIG_NÆRINGSDRIVENDE_FÅTT_INNTEKT" }} + Du har hatt næringsinntekt uten at {{{ytelsesnavnBestemt}}} har blitt redusert. + {{/case}} + {{#case "SELVSTENDIG_NÆRINGSDRIVENDE_ENDRET_INNTEKT" }} + Du har fått {{{ytelsesnavnUbestemt}}} redusert etter næringsinntekt. Næringsinntekten din har økt med 10 prosent eller mer. + {{/case}} + {{/switch}} + {{/case}} + {{#case "PENSJONSYTELSER"}} + {{#switch fakta.hendelsesundertype}} + {{#case "UFØRETRYGD" }} + Du har fått uføretrygd som skulle ha redusert {{{ytelsesnavnBestemt}}}. + {{/case}} + {{#case "GJENLEVENDE_EKTEFELLE" }} + Du har fått pensjon som gjenlevende ektefelle som skulle ha redusert {{{ytelsesnavnBestemt}}}. + {{/case}} + {{/switch}} + {{/case}} + {{#case "STØNAD_TIL_BARNETILSYN"}} + {{#switch fakta.hendelsesundertype}} + {{#case "IKKE_ARBEID" }} + Du har fått stønad til barnetilsyn. Fordi du ikke lenger er i arbeid, har du ikke rett til stønaden. + {{/case}} + {{#case "EGEN_VIRKSOMHET" }} + Du har fått stønad til barnetilsyn. Fordi du har avsluttet etableringen av egen virksomhet, har du ikke rett på stønaden. + {{/case}} + {{#case "TILSYNSUTGIFTER_OPPHØRT" }} + Du har fått stønad til barnetilsyn etter at tilsynsordningen er avsluttet. Fordi du ikke lenger har utgifter til barnetilsyn, har du fått for mye utbetalt. + {{/case}} + {{#case "TILSYNSUTGIFTER_ENDRET" }} + Du har fått stønad til barnetilsyn. Fordi utgiftene til barnetilsyn er redusert, har du fått for mye utbetalt. + {{/case}} + {{#case "FORBIGÅENDE_SYKDOM" }} + Du har fått stønad til barnetilsyn fordi du hadde en forbigående sykdom som hindret deg fra å arbeide. + {{/case}} + {{#case "ETTER_4_SKOLEÅR_UTGIFTENE_OPPHØRT" }} + Du har fått stønad til barnetilsyn for barn som har fullført fjerde skoleår. + {{/case}} + {{#case "ETTER_4_SKOLEÅR_ENDRET_ARBEIDSTID" }} + Du har fått stønad til barnetilsyn for barn som har fullført fjerde skoleår. + {{/case}} + {{#case "INNTEKT_OVER_6G" }} + Du har fått stønad til barnetilsyn. Fordi inntekten din er over {{#if grunnbeløp.grunnbeløpGanger6}}{{kroner grunnbeløp.grunnbeløpGanger6}}{{else}}seks ganger grunnbeløpet{{/if}}, har du ikke lenger rett til stønaden. + {{#if grunnbeløp.tekst6GangerGrunnbeløp}} + + Seks ganger grunnbeløpet er {{grunnbeløp.tekst6GangerGrunnbeløp}}. + {{/if}} + {{/case}} + {{#case "KONTANTSTØTTE" }} + Du har fått stønad til barnetilsyn og kontantstøtte. Kontantstøtte skal trekkes fra tilsynsutgiftene før stønad til barnetilsyn beregnes. + {{/case}} + {{#case "ØKT_KONTANTSTØTTE" }} + Du har fått stønad til barnetilsyn og kontantstøtte. Kontantstøtte skal trekkes fra tilsynsutgiftene før stønad til barnetilsyn beregnes. + {{/case}} + {{/switch}} + {{/case}} + {{#case "SKOLEPENGER"}} + {{#switch fakta.hendelsesundertype}} + {{#case "IKKE_RETT_TIL_OVERGANGSSTØNAD" }} + Du har fått skolepenger. Du kan kun få skolepenger dersom du har rett til overgangsstønad. + {{/case}} + {{#case "SLUTTET_I_UTDANNING" }} + Du har fått stønad til dekning av skolepenger etter at du sluttet på utdanningen. + {{/case}} + {{/switch}} + {{/case}} +{{/switch}} +{{#if fakta.fritekstFakta}} + {{#if (eq fakta.hendelsesundertype "ANNET_FRITEKST")}} + {{{fakta.fritekstFakta}}} + + {{#if gjelderDødsfall}}Det er utbetalt {{{kroner kravgrunnlag.feilutbetaltBeløp}}} for mye.{{else}}Du har fått {{{kroner kravgrunnlag.feilutbetaltBeløp}}} for mye utbetalt.{{/if}} + {{else}} + + {{{fakta.fritekstFakta}}} + {{/if}} +{{/if}} +{{/with}} \ No newline at end of file diff --git "a/src/main/resources/templates/nb/vedtak/vedtak_sammensl\303\245_perioder.hbs" "b/src/main/resources/templates/nb/vedtak/vedtak_sammensl\303\245_perioder.hbs" new file mode 100644 index 000000000..9971881d9 --- /dev/null +++ "b/src/main/resources/templates/nb/vedtak/vedtak_sammensl\303\245_perioder.hbs" @@ -0,0 +1,12 @@ +{{> nb/vedtak/vedtak_felles}} +{{> nb/vedtak/vedtak_start}} +_Perioder som er feilutbetalt + +{{#with perioder.[0] as |periode|}} +{{> nb/vedtak/periode-fakta/periode_fakta_ef_sammenslå_perioder perioder=perioder}} +{{> nb/vedtak/periode_foreldelse perioder=periode}} +{{> nb/vedtak/periode_vilkår perioder=periode}} +{{> nb/vedtak/periode_særlige_grunner perioder=periode}} +{{> nb/vedtak/periode_slutt perioder=periode}} +{{/with}} +{{> nb/vedtak/vedtak_slutt}} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/tilbake/DatabaseChangesTest.kt b/src/test/kotlin/no/nav/familie/tilbake/DatabaseChangesTest.kt index 3656d502a..a80de8f11 100644 --- a/src/test/kotlin/no/nav/familie/tilbake/DatabaseChangesTest.kt +++ b/src/test/kotlin/no/nav/familie/tilbake/DatabaseChangesTest.kt @@ -7,7 +7,7 @@ import java.nio.file.Paths class DatabaseChangesTest { companion object { // Denne knekker bygg med høyere db-versjon enn main. Oppdater kun når du er klar for å merge db-endringer. - const val MERGED_DB_VERSION = 39 + const val MERGED_DB_VERSION = 40 } /** diff --git a/src/test/kotlin/no/nav/familie/tilbake/behandling/steg/StegServiceTest.kt b/src/test/kotlin/no/nav/familie/tilbake/behandling/steg/StegServiceTest.kt index 8a1854272..e6f7eb9aa 100644 --- a/src/test/kotlin/no/nav/familie/tilbake/behandling/steg/StegServiceTest.kt +++ b/src/test/kotlin/no/nav/familie/tilbake/behandling/steg/StegServiceTest.kt @@ -50,6 +50,7 @@ import no.nav.familie.tilbake.behandlingskontroll.domain.Venteårsak import no.nav.familie.tilbake.common.ContextService import no.nav.familie.tilbake.common.repository.findByIdOrThrow import no.nav.familie.tilbake.data.Testdata +import no.nav.familie.tilbake.data.Testdata.lagKravgrunnlagsperiode import no.nav.familie.tilbake.faktaomfeilutbetaling.FaktaFeilutbetalingService import no.nav.familie.tilbake.faktaomfeilutbetaling.domain.Hendelsestype import no.nav.familie.tilbake.faktaomfeilutbetaling.domain.Hendelsesundertype @@ -461,26 +462,13 @@ internal class StegServiceTest : OppslagSpringRunnerTest() { @Test fun `håndterSteg skal utføre foreldelse og fortsette til foreslå vedtak når alle perioder endret til foreldet`() { - lagBehandlingsstegstilstand(Behandlingssteg.FAKTA, Behandlingsstegstatus.UTFØRT) - lagBehandlingsstegstilstand(Behandlingssteg.FORELDELSE, Behandlingsstegstatus.KLAR) + val fom = LocalDate.of(2010, 1, 1) + val tom = LocalDate.of(2010, 1, 31) + + lagBehandlingsstegstilstand(Behandlingssteg.FAKTA, Behandlingsstegstatus.KLAR) + kravgrunnlagRepository.insert(Testdata.lagKravgrunnlag(behandling.id, setOf(lagKravgrunnlagsperiode(fom, tom)))) + stegService.håndterSteg(behandlingId, lagBehandlingsstegFaktaDto(fom, tom)) - var kravgrunnlag431 = Testdata.lagKravgrunnlag(behandling.id) - for (grunnlagsperiode in kravgrunnlag431.perioder) { - kravgrunnlag431 = - kravgrunnlag431.copy( - perioder = - setOf( - grunnlagsperiode.copy( - periode = - Månedsperiode( - LocalDate.of(2010, 1, 1), - LocalDate.of(2010, 1, 31), - ), - ), - ), - ) - } - kravgrunnlagRepository.insert(kravgrunnlag431) // foreldelsesteg vurderte som IKKE_FORELDET med første omgang var behandlingsstegForeldelseDto = BehandlingsstegForeldelseDto( @@ -995,10 +983,13 @@ internal class StegServiceTest : OppslagSpringRunnerTest() { ) } - private fun lagBehandlingsstegFaktaDto(): BehandlingsstegFaktaDto { + private fun lagBehandlingsstegFaktaDto( + fomParameter: LocalDate = fom, + tomParameter: LocalDate = tom, + ): BehandlingsstegFaktaDto { val faktaFeilutbetaltePerioderDto = FaktaFeilutbetalingsperiodeDto( - periode = Datoperiode(fom, tom), + periode = Datoperiode(fomParameter, tomParameter), hendelsestype = Hendelsestype.ANNET, hendelsesundertype = Hendelsesundertype.ANNET_FRITEKST, ) diff --git a/src/test/kotlin/no/nav/familie/tilbake/data/Testdata.kt b/src/test/kotlin/no/nav/familie/tilbake/data/Testdata.kt index fe68f80b7..1509a95c9 100644 --- a/src/test/kotlin/no/nav/familie/tilbake/data/Testdata.kt +++ b/src/test/kotlin/no/nav/familie/tilbake/data/Testdata.kt @@ -229,7 +229,28 @@ object Testdata { månedligSkattebeløp = BigDecimal("123.11"), ) - fun lagKravgrunnlag(behandlingId: UUID) = + fun lagKravgrunnlagsperiode( + fom: LocalDate, + tom: LocalDate, + ): Kravgrunnlagsperiode432 = + Kravgrunnlagsperiode432( + periode = + Månedsperiode( + fom, + tom, + ), + beløp = + setOf( + feilKravgrunnlagsbeløp433, + ytelKravgrunnlagsbeløp433, + ), + månedligSkattebeløp = BigDecimal("123.11"), + ) + + fun lagKravgrunnlag( + behandlingId: UUID, + perioder: Set = setOf(kravgrunnlagsperiode432), + ) = Kravgrunnlag431( behandlingId = behandlingId, vedtakId = BigInteger.ZERO, @@ -251,7 +272,7 @@ object Testdata { saksbehandlerId = "testverdi", referanse = "testverdi", eksternKravgrunnlagId = BigInteger.ZERO, - perioder = setOf(kravgrunnlagsperiode432), + perioder = perioder, aktiv = true, sperret = false, ) @@ -343,6 +364,7 @@ object Testdata { Vedtaksbrevsoppsummering( behandlingId = behandlingId, oppsummeringFritekst = "testverdi", + skalSammenslåPerioder = false, ) fun lagVedtaksbrevsperiode(behandlingId: UUID) = diff --git a/src/test/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevServiceTest.kt b/src/test/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevServiceTest.kt index cb42903ac..b91791a87 100644 --- a/src/test/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevServiceTest.kt +++ b/src/test/kotlin/no/nav/familie/tilbake/dokumentbestilling/vedtak/VedtaksbrevServiceTest.kt @@ -131,6 +131,9 @@ internal class VedtaksbrevServiceTest : OppslagSpringRunnerTest() { @Autowired private lateinit var behandlingsstegstilstandRepository: BehandlingsstegstilstandRepository + @Autowired + private lateinit var periodeService: PeriodeService + @BeforeEach fun init() { spyPdfBrevService = spyk(pdfBrevService) @@ -150,12 +153,12 @@ internal class VedtaksbrevServiceTest : OppslagSpringRunnerTest() { vedtaksbrevgrunnlagService, faktaRepository, vilkårsvurderingRepository, - fagsakRepository, vedtaksbrevsoppsummeringRepository, vedtaksbrevsperiodeRepository, spyPdfBrevService, sendBrevService, featureToggleService, + periodeService, ) fagsak = fagsakRepository.insert(Testdata.fagsak) diff --git "a/src/test/resources/kravgrunnlagxml/kravgrunnlag_lokal_kj\303\270ring.xml" "b/src/test/resources/kravgrunnlagxml/kravgrunnlag_lokal_kj\303\270ring.xml" index 096ca385e..ebe635cdf 100644 --- "a/src/test/resources/kravgrunnlagxml/kravgrunnlag_lokal_kj\303\270ring.xml" +++ "b/src/test/resources/kravgrunnlagxml/kravgrunnlag_lokal_kj\303\270ring.xml" @@ -68,31 +68,6 @@ 0.0000 - - - 2024-06-01 - 2024-06-30 - - 0.00 - - EFOG - YTEL - 21718.00 - 12831.00 - 8887.00 - 0.00 - 0.0000 - - - KL_KODE_FEIL_EFOG - FEIL - 0.00 - 8887.00 - 0.00 - 0.00 - 0.0000 - - 2024-07-01