Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public abstract class ForeslåBehandlingsresultatTjeneste {

if (skalBehandlingenSettesTilAvslått(ref, vilkårene)) {
behandling.setBehandlingResultatType(BehandlingResultatType.AVSLÅTT);
} else if (skalBehandlingenSettesTilOpphørt(ref, vilkårene)) {
behandling.setBehandlingResultatType(BehandlingResultatType.OPPHØR);
log.info("Behandling {} opphørt", ref.getBehandlingId());
} else if (skalBehandlingenSettesTilDelvisInnvilget(ref, vilkårene)) {
behandling.setBehandlingResultatType(BehandlingResultatType.DELVIS_INNVILGET);
log.info("Behandling {} delvis innvilget", ref.getBehandlingId());
Expand All @@ -62,6 +65,10 @@ protected boolean skalBehandlingenSettesTilDelvisInnvilget(BehandlingReferanse r
return false;
}

protected boolean skalBehandlingenSettesTilOpphørt(BehandlingReferanse ref, Vilkårene vilkårene) {
return false;
}

protected boolean skalBehandlingenSettesTilAvslått(BehandlingReferanse ref, Vilkårene vilkårene) {
var behandlingId = ref.getBehandlingId();
Optional<VilkårType> førsteAvslåttVilkår = sjekkAllePerioderAvslåttForVilkår(vilkårene, behandlingId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import no.nav.fpsak.tidsserie.LocalDateSegment;
import no.nav.fpsak.tidsserie.LocalDateTimeline;
import no.nav.fpsak.tidsserie.StandardCombinators;
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
import no.nav.ung.kodeverk.vilkår.VilkårType;
import no.nav.ung.sak.behandling.BehandlingReferanse;
import no.nav.ung.sak.behandlingskontroll.FagsakYtelseTypeRef;
Expand Down Expand Up @@ -56,6 +57,12 @@ protected DatoIntervallEntitet getMaksPeriode(Long behandlingId) {
return DatoIntervallEntitet.fraOgMedTilOgMed(timeline.getMinLocalDate(), timeline.getMaxLocalDate());
}


@Override
protected boolean skalBehandlingenSettesTilOpphørt(BehandlingReferanse ref, Vilkårene vilkårene) {
return behandlingRepository.hentBehandling(ref.getBehandlingId()).getBehandlingÅrsakerTyper().stream().anyMatch(it -> it == BehandlingÅrsakType.RE_HENDELSE_OPPHØR_UNGDOMSPROGRAM);
}

@Override
protected boolean skalBehandlingenSettesTilAvslått(BehandlingReferanse ref, Vilkårene vilkårene) {
var maksPeriode = getMaksPeriode(ref.getBehandlingId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import no.nav.fpsak.tidsserie.LocalDateTimeline;
import no.nav.ung.kodeverk.dokument.Brevkode;
import no.nav.ung.sak.behandling.FagsakTjeneste;
import no.nav.ung.sak.behandlingslager.fagsak.Fagsak;
import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet;
import no.nav.ung.sak.ungdomsprogram.forbruktedager.FagsakperiodeUtleder;
import no.nav.ung.sak.behandlingskontroll.*;
import no.nav.ung.sak.behandlingslager.behandling.motattdokument.MottattDokument;
Expand All @@ -14,7 +18,9 @@
import no.nav.ung.sak.behandlingslager.fagsak.FagsakRepository;
import no.nav.ung.sak.typer.JournalpostId;
import no.nav.ung.sak.ungdomsprogram.UngdomsprogramPeriodeTjeneste;
import org.jetbrains.annotations.Nullable;

import java.time.LocalDate;
import java.util.Set;
import java.util.stream.Collectors;

Expand All @@ -31,14 +37,20 @@ public class InitierPerioderSteg implements BehandlingSteg {
private BehandlingRepository behandlingRepository;
private UngdomsytelseStartdatoRepository startdatoRepository;
private MottatteDokumentRepository mottatteDokumentRepository;
private UngdomsprogramPeriodeTjeneste ungdomsprogramPeriodeTjeneste;
private FagsakRepository fagsakRepository;

@Inject
public InitierPerioderSteg(BehandlingRepository behandlingRepository,
UngdomsytelseStartdatoRepository startdatoRepository,
MottatteDokumentRepository mottatteDokumentRepository) {
MottatteDokumentRepository mottatteDokumentRepository,
UngdomsprogramPeriodeTjeneste ungdomsprogramPeriodeTjeneste,
FagsakRepository fagsakRepository) {
this.behandlingRepository = behandlingRepository;
this.startdatoRepository = startdatoRepository;
this.mottatteDokumentRepository = mottatteDokumentRepository;
this.ungdomsprogramPeriodeTjeneste = ungdomsprogramPeriodeTjeneste;
this.fagsakRepository = fagsakRepository;
}

public InitierPerioderSteg() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
import no.nav.ung.kodeverk.person.RelasjonsRolleType;
import no.nav.ung.sak.behandlingslager.fagsak.Fagsak;
import no.nav.ung.sak.behandlingslager.fagsak.FagsakRepository;
import no.nav.ung.sak.domene.typer.tid.AbstractLocalDateInterval;
import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet;
import no.nav.ung.sak.typer.AktørId;

import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -61,8 +62,27 @@ private boolean finnesSakMedBarn(AktørId barnAktørId) {
return !query.getResultList().isEmpty();
}

public Optional<Fagsak> hentRelevantFagsakForAktørSomSøker(AktørId aktør, LocalDate relevantDato) {
return fagsakRepository.hentForBruker(aktør).stream().filter(f -> f.getPeriode().overlapper(relevantDato, AbstractLocalDateInterval.TIDENES_ENDE)).findFirst();
public Optional<Fagsak> hentNærmesteFagsakForAktørSomSøker(AktørId aktør, LocalDate relevantDato) {
return fagsakRepository.hentForBruker(aktør).stream()
.min(Comparator.comparing(it -> dagerMellom(it.getPeriode(), relevantDato)));
}


public Optional<Fagsak> hentOverlappendeFagsakForAktørSomSøker(AktørId aktør, LocalDate relevantDato) {
return fagsakRepository.hentForBruker(aktør).stream()
.filter(it -> it.getPeriode().inkluderer(relevantDato))
.findFirst();
}


private int dagerMellom(DatoIntervallEntitet periode, LocalDate relevantDato) {
if (periode.getFomDato().isAfter(relevantDato)) {
return relevantDato.until(periode.getFomDato()).getDays();
}
if (periode.getTomDato().isBefore(relevantDato)) {
return periode.getTomDato().until(relevantDato).getDays();
}
return 0;
}

private boolean finnesSakMedSøker(AktørId søkerAktørId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public class PdlDødsfallFagsakTilVurderingUtleder implements FagsakerTilVurderi
var fagsakÅrsakMap = new HashMap<Fagsak, ÅrsakOgPeriode>();

// Sjekker om det gjelder dødshendelse for søker
var fagsakForAktør = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, aktuellDato);
var fagsakForAktør = finnFagsakerForAktørTjeneste.hentOverlappendeFagsakForAktørSomSøker(aktør, aktuellDato);
if (fagsakForAktør.isPresent()) {
if (deltarIProgramPåHendelsedato(fagsakForAktør.get(), aktuellDato, hendelseId) && erNyInformasjonIHendelsen(fagsakForAktør.get(), aktør, aktuellDato, hendelseId)) {
fagsakÅrsakMap.put(fagsakForAktør.get(), new ÅrsakOgPeriode(BehandlingÅrsakType.RE_HENDELSE_DØD_FORELDER, DatoIntervallEntitet.fraOgMedTilOgMed(aktuellDato, fagsakForAktør.get().getPeriode().getTomDato())));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public class PdlFødselshendelseFagsakTilVurderingUtleder implements FagsakerTil
var fagsakÅrsakMap = new HashMap<Fagsak, ÅrsakOgPeriode>();

for (AktørId aktør : forelderAktørIder) {
Optional<Fagsak> fagsak = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, aktuellDato);
Optional<Fagsak> fagsak = finnFagsakerForAktørTjeneste.hentOverlappendeFagsakForAktørSomSøker(aktør, aktuellDato);

fagsak.ifPresent(f -> {
if (deltarIProgramPåHendelsedato(f, aktuellDato, hendelseId) && erNyInformasjonIHendelsen(f, aktør, aktuellDato, hendelseId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
import no.nav.ung.sak.behandlingslager.behandling.repository.BehandlingRepository;
import no.nav.ung.sak.behandlingslager.fagsak.Fagsak;
import no.nav.ung.sak.behandlingslager.perioder.UngdomsprogramPeriode;
import no.nav.ung.sak.behandlingslager.perioder.UngdomsprogramPeriodeGrunnlag;
import no.nav.ung.sak.behandlingslager.perioder.UngdomsprogramPeriodeRepository;
import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet;
import no.nav.ung.sak.kontrakt.hendelser.Hendelse;
Expand Down Expand Up @@ -49,7 +47,7 @@ public UngdomsprogramEndretStartdatoFagsakTilVurderingUtleder(BehandlingReposito
var fagsaker = new HashMap<Fagsak, ÅrsakOgPeriode>();

for (AktørId aktør : aktører) {
var relevantFagsak = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, nyFomdato);
var relevantFagsak = finnFagsakerForAktørTjeneste.hentNærmesteFagsakForAktørSomSøker(aktør, nyFomdato);
if (relevantFagsak.isEmpty()) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class UngdomsprogramOpphørFagsakTilVurderingUtleder implements FagsakerT
var fagsaker = new HashMap<Fagsak, ÅrsakOgPeriode>();

for (AktørId aktør : aktører) {
var relevantFagsak = finnFagsakerForAktørTjeneste.hentRelevantFagsakForAktørSomSøker(aktør, opphørsdatoFraHendelse);
var relevantFagsak = finnFagsakerForAktørTjeneste.hentNærmesteFagsakForAktørSomSøker(aktør, opphørsdatoFraHendelse);
if (relevantFagsak.isEmpty()) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
import no.nav.ung.sak.behandlingslager.fagsak.FagsakProsesstaskRekkefølge;
import no.nav.ung.sak.behandlingslager.fagsak.FagsakRepository;
import no.nav.ung.sak.behandlingslager.task.UnderBehandlingProsessTask;
import no.nav.ung.sak.domene.typer.tid.DatoIntervallEntitet;
import no.nav.ung.sak.ungdomsprogram.UngdomsprogramPeriodeTjeneste;
import no.nav.ung.sak.ungdomsprogram.UngdomsprogramTjeneste;
import no.nav.ung.sak.ungdomsprogram.forbruktedager.FagsakperiodeUtleder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static no.nav.ung.kodeverk.uttak.Tid.TIDENES_ENDE;

@ApplicationScoped
@ProsessTask(InnhentUngdomsprogramperioderTask.TASKTYPE)
@FagsakProsesstaskRekkefølge(gruppeSekvens = true)
Expand Down Expand Up @@ -48,7 +50,20 @@ public void doProsesser(ProsessTaskData prosessTaskData, Behandling behandling)
ungdomsprogramTjeneste.innhentOpplysninger(behandling);
final var periodeTidslinje = ungdomsprogramPeriodeTjeneste.finnPeriodeTidslinje(behandling.getId());
if (!periodeTidslinje.isEmpty()) {
fagsakRepository.utvidPeriode(behandling.getFagsakId(), periodeTidslinje.getMinLocalDate(), FagsakperiodeUtleder.finnTomDato(periodeTidslinje.getMinLocalDate(), periodeTidslinje));
begrensFagsakperiode(behandling.getId(), behandling.getFagsakId());
}
}

private void begrensFagsakperiode(Long behandlingId, Long fagsakId) {
var periodeTidslinje = ungdomsprogramPeriodeTjeneste.finnPeriodeTidslinje(behandlingId);
if (periodeTidslinje.isEmpty()) {
// Hvis det ikke finnes noen perioder, så er det ingenting å gjøre
return;
}
var sisteDagIProgrammet = periodeTidslinje.getMaxLocalDate();
var fagsak = fagsakRepository.finnEksaktFagsak(fagsakId);
// Begrenser fagsakperioden til programperioden
var nyFagsakPeriode = DatoIntervallEntitet.fraOgMedTilOgMed(periodeTidslinje.getMinLocalDate(), sisteDagIProgrammet.isBefore(TIDENES_ENDE) ? sisteDagIProgrammet : fagsak.getPeriode().getTomDato());
fagsakRepository.oppdaterPeriode(fagsakId, nyFagsakPeriode.getFomDato(), nyFagsakPeriode.getTomDato());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import no.nav.fpsak.tidsserie.LocalDateTimeline;
import no.nav.fpsak.tidsserie.LocalDateTimeline.JoinStyle;
import no.nav.fpsak.tidsserie.StandardCombinators;
import no.nav.ung.kodeverk.behandling.BehandlingResultatType;
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
import no.nav.ung.kodeverk.vilkår.VilkårType;
import no.nav.ung.sak.behandlingslager.behandling.Behandling;
Expand Down Expand Up @@ -47,9 +48,10 @@ public LocalDateTimeline<DetaljertResultat> utledDetaljertResultat(Behandling be
var samletVilkårTidslinje = samleVilkårIEnTidslinje(vilkårPeriodeResultatMap);

var vilkårOgBehandlingsårsakerTidslinje = triggerPerioder
.intersection(samletVilkårTidslinje,
.combine(samletVilkårTidslinje,
(p, behandlingÅrsaker, vilkårResultater)
-> new LocalDateSegment<>(p, new SamletVilkårResultatOgBehandlingÅrsaker(vilkårResultater.getValue(), behandlingÅrsaker.getValue())));
-> new LocalDateSegment<>(p, new SamletVilkårResultatOgBehandlingÅrsaker(vilkårResultater != null ? vilkårResultater.getValue() : List.of(), behandlingÅrsaker.getValue(), behandling.getBehandlingResultatType())),
JoinStyle.LEFT_JOIN);

var tilkjentYtelseTidslinje = tilkjentYtelseRepository.hentTidslinje(behandling.getId()).compress();

Expand Down Expand Up @@ -146,7 +148,7 @@ private static Set<DetaljertResultatInfo> bestemResultat(
}

if (relevanteÅrsaker.contains(BehandlingÅrsakType.RE_HENDELSE_OPPHØR_UNGDOMSPROGRAM)) {
resultater.add(endretSluttdatoDetaljertResultat(avslåtteVilkår));
resultater.add(endretSluttdatoDetaljertResultat(vilkårsresultatOgBehandlingsårsaker.behandlingResultatType()));
}

relevanteÅrsaker.stream()
Expand Down Expand Up @@ -194,8 +196,8 @@ private static Set<DetaljertResultatInfo> bestemResultat(
return Optional.empty();
}

private static DetaljertResultatInfo endretSluttdatoDetaljertResultat(Set<DetaljertVilkårResultat> avslåtteVilkår) {
if (harAvslåttVilkår(avslåtteVilkår, VilkårType.UNGDOMSPROGRAMVILKÅRET)) {
private static DetaljertResultatInfo endretSluttdatoDetaljertResultat(BehandlingResultatType behandlingResultatType) {
if (erOpphør(behandlingResultatType)) {
return DetaljertResultatInfo.of(DetaljertResultatType.ENDRING_SLUTTDATO, "Opphør av ungdomsprogramperiode");
} else {
return DetaljertResultatInfo.of(DetaljertResultatType.ENDRING_SLUTTDATO, "Opphørsdato flyttet fremover");
Expand Down Expand Up @@ -243,4 +245,8 @@ private static DetaljertResultatInfo kontrollerInntektDetaljertResultat(Tilkjent
return avslåtteVilkår.stream().anyMatch
(it -> it.vilkårType() == vilkårType);
}

private static boolean erOpphør(BehandlingResultatType behandlingResultatType) {
return behandlingResultatType == BehandlingResultatType.OPPHØR;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.ung.sak.formidling.vedtak.resultat;

import no.nav.ung.kodeverk.behandling.BehandlingResultatType;
import no.nav.ung.kodeverk.behandling.BehandlingÅrsakType;
import no.nav.ung.kodeverk.vilkår.Utfall;

Expand All @@ -13,7 +14,8 @@
*
*/
public record SamletVilkårResultatOgBehandlingÅrsaker(List<DetaljertVilkårResultat> vilkårsresultater,
Set<BehandlingÅrsakType> behandlingÅrsaker) {
Set<BehandlingÅrsakType> behandlingÅrsaker,
BehandlingResultatType behandlingResultatType) {

public Set<Utfall> utfall() {
return vilkårsresultater.stream().map(DetaljertVilkårResultat::utfall).collect(Collectors.toSet());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ public enum BehandlingResultatType implements Kodeverdi {
INNVILGET("INNVILGET", "Innvilget"),
DELVIS_INNVILGET("DELVIS_INNVILGET", "Delvis innvilget"),
AVSLÅTT("AVSLÅTT", "Avslått"),
/** @deprecated OPPHØR brukes ikke lenger, om det er opphør (mot OS) beregnes i k9-oppdrag */
OPPHØR("OPPHØR", "Opphør"),
HENLAGT_SØKNAD_TRUKKET("HENLAGT_SØKNAD_TRUKKET", "Henlagt, søknaden er trukket", true),
HENLAGT_FEILOPPRETTET("HENLAGT_FEILOPPRETTET", "Henlagt, søknaden er feilopprettet", true),
Expand Down
Loading