Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bedre håndtering retur beslutter #2008

Merged
merged 4 commits into from
Oct 10, 2023
Merged
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 @@ -8,12 +8,11 @@
import java.util.List;
import java.util.Optional;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import no.nav.foreldrepenger.los.domene.typer.BehandlingId;
import no.nav.foreldrepenger.los.domene.typer.aktør.AktørId;
import no.nav.foreldrepenger.los.hendelse.hendelsehåndterer.OppgaveEgenskapFinner;
Expand Down Expand Up @@ -73,10 +72,13 @@ public class TilbakekrevingHendelseHåndterer {
var aksjonspunkter = behandlingDto.aksjonspunkt();
var egenskapFinner = new TilbakekrevingOppgaveEgenskapFinner(aksjonspunkter, behandlingDto.ansvarligSaksbehandlerIdent(), egenskaperDto);
var behandlendeEnhet = behandlingDto.behandlendeEnhetId();
var event = eventFra(aksjonspunkter, oppgaveHistorikk, egenskapFinner, behandlendeEnhet);
var event = eventFra(aksjonspunkter, oppgaveHistorikk, egenskapFinner);


switch (event) {
case IKKE_RELEVANT -> {
// NOOP
}
case LUKK_OPPGAVE_MANUELT_VENT -> {
LOG.info("TBK Lukker oppgave, satt manuelt på vent.");
avsluttOppgaveForBehandling(behandlingId);
Expand Down Expand Up @@ -104,7 +106,7 @@ public class TilbakekrevingHendelseHåndterer {
køStatistikk.lagre(beslutterOppgave, KøOppgaveHendelse.ÅPNET_OPPGAVE);
loggEvent(behandlingId, OppgaveEventType.OPPRETTET, TIL_BESLUTTER, behandlendeEnhet);
}
case GJENÅPNE_OPPGAVE -> { // Blir ikke utledet .... fjernes ?
case GJENÅPNE_OPPGAVE -> {
var gjenåpnetOppgave = oppgaveTjeneste.gjenåpneTilbakekrevingOppgave(behandlingId);
LOG.info("TBK Gjenåpner oppgave for behandlingId {}.", behandlingId);
oppdaterOppgaveInformasjon(gjenåpnetOppgave, behandlingId, behandlingDto);
Expand Down Expand Up @@ -132,32 +134,26 @@ private void reserverForOpprettOppgave(Oppgave oppgave, OppgaveHistorikk oppgave

private EventResultat eventFra(List<LosBehandlingDto.LosAksjonspunktDto> aksjonspunkter,
OppgaveHistorikk oppgaveHistorikk,
OppgaveEgenskapFinner egenskaper,
String behandlendeEnhet) {
OppgaveEgenskapFinner egenskaper) {
var erTilBeslutter = egenskaper.getAndreKriterier().contains(TIL_BESLUTTER);

if (aktivLosManuellVent(aksjonspunkter)) {
return EventResultat.LUKK_OPPGAVE_MANUELT_VENT;
return oppgaveHistorikk.erPåVent() ? EventResultat.IKKE_RELEVANT : EventResultat.LUKK_OPPGAVE_MANUELT_VENT;
}
if (harAktiveLosAksjonspunkt(aksjonspunkter) && oppgaveHistorikk.erÅpenOppgave()) {
if (erTilBeslutter && !oppgaveHistorikk.erSisteOpprettedeOppgaveTilBeslutter()) {
return EventResultat.OPPRETT_BESLUTTER_OPPGAVE;
}
if (erTilBeslutter) {
return oppgaveHistorikk.erSisteOppgaveRegistrertPåEnhet(behandlendeEnhet) ?
EventResultat.OPPDATER_ÅPEN_OPPGAVE : EventResultat.OPPRETT_OPPGAVE;
}
if (oppgaveHistorikk.erSisteOpprettedeOppgaveTilBeslutter()) {
// ikke til beslutter pt, dermed retur fra beslutter
return EventResultat.OPPRETT_OPPGAVE;
}
return oppgaveHistorikk.erSisteOppgaveRegistrertPåEnhet(behandlendeEnhet) ?
EventResultat.OPPDATER_ÅPEN_OPPGAVE : EventResultat.OPPRETT_OPPGAVE;
if (!harAktiveLosAksjonspunkt(aksjonspunkter)) {
return oppgaveHistorikk.erUtenHistorikk() || oppgaveHistorikk.erIngenÅpenOppgave() ? EventResultat.IKKE_RELEVANT : EventResultat.LUKK_OPPGAVE;
}
if (harAktiveLosAksjonspunkt(aksjonspunkter)) {
return EventResultat.OPPRETT_OPPGAVE;
if (erTilBeslutter) {
return oppgaveHistorikk.erÅpenOppgave() && oppgaveHistorikk.erSisteOpprettedeOppgaveTilBeslutter() ?
EventResultat.OPPDATER_ÅPEN_OPPGAVE : EventResultat.OPPRETT_BESLUTTER_OPPGAVE;
}
if (oppgaveHistorikk.harEksistertOppgave()) {
if (oppgaveHistorikk.erÅpenOppgave()) {
return oppgaveHistorikk.erSisteOpprettedeOppgaveTilBeslutter() ? EventResultat.OPPRETT_OPPGAVE : EventResultat.OPPDATER_ÅPEN_OPPGAVE;
}
return EventResultat.GJENÅPNE_OPPGAVE;
}
return EventResultat.LUKK_OPPGAVE;
return EventResultat.OPPRETT_OPPGAVE;
}

private static boolean harAktiveLosAksjonspunkt(List<LosBehandlingDto.LosAksjonspunktDto> aksjonspunkter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import no.nav.foreldrepenger.los.hendelse.hendelsehåndterer.FagsakEgenskaper;
import no.nav.foreldrepenger.los.hendelse.hendelsehåndterer.OppgaveEgenskapFinner;
Expand Down Expand Up @@ -33,7 +34,8 @@ public TilbakekrevingOppgaveEgenskapFinner(List<LosBehandlingDto.LosAksjonspunkt
if (FagsakEgenskaper.fagsakErMarkertNæring(egenskaperDto)) {
this.andreKriterier.add(AndreKriterierType.NÆRING);
}
if (aksjonspunkter.stream().anyMatch(a -> a.definisjon().equals("5005") && Aksjonspunktstatus.OPPRETTET.equals(a.status()))) {
if (aksjonspunkter.stream().anyMatch(a -> a.definisjon().equals("5005") && Aksjonspunktstatus.OPPRETTET.equals(a.status())) &&
aksjonspunkter.stream().noneMatch(a -> !Set.of("5005","7001","7002").contains(a.definisjon()) && Aksjonspunktstatus.OPPRETTET.equals(a.status()))) {
this.andreKriterier.add(AndreKriterierType.TIL_BESLUTTER);
}
this.saksbehandlerForTotrinn = saksbehandler;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@
import java.util.List;
import java.util.stream.Collectors;

import jakarta.persistence.EntityManager;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;

import jakarta.persistence.EntityManager;
import no.nav.foreldrepenger.extensions.JpaExtension;
import no.nav.foreldrepenger.los.DBTestUtil;
import no.nav.foreldrepenger.los.domene.typer.BehandlingId;
Expand Down Expand Up @@ -140,10 +139,29 @@ void skalOppretteTilBeslutterEgenskapVedAksjonspunkt5005() {
handler.håndterBehandling(førsteEvent);

sjekkAktivOppgaveEksisterer(true);
verifiserAktivBeslutterEgenskap();
sjekkBeslutterEgenskapMedAktivstatus(true);

handler.håndterBehandling(andreEventUtenBeslutter);
verifiserInaktivBeslutterEgenskap();
sjekkBeslutterEgenskapMedAktivstatus(false);
}

@Test
void skalOppretteTilBeslutterEgenskapVedReturTilForeslå() {
var behandlingId = BehandlingId.random();
var førsteEvent = hendelse(åpentAksjonspunkt, behandlingId);
var andreEventBeslutter = hendelse(åpentBeslutter, behandlingId);
var tredjeAp = List.of(lagAp("5005", "OPPR"), lagAp("5004", "OPPR"));
var tredjeEventReturTilForeslå = hendelse(tredjeAp, behandlingId);
handler.håndterBehandling(førsteEvent);

sjekkAktivOppgaveEksisterer(true);
sjekkBeslutterEgenskapMedAktivstatus(false);

handler.håndterBehandling(andreEventBeslutter);
sjekkBeslutterEgenskapMedAktivstatus(true);

handler.håndterBehandling(tredjeEventReturTilForeslå);
sjekkBeslutterEgenskapMedAktivstatus(false);
}

@Test
Expand Down Expand Up @@ -204,18 +222,16 @@ private void verifiserOppgaveEvent(OppgaveEventLogg event, OppgaveEventType type
assertThat(event.getAndreKriterierType()).isEqualTo(kriterierType);
}

private void verifiserAktivBeslutterEgenskap() {
sjekkBeslutterEgenskapMedAktivstatus(true);
}

private void verifiserInaktivBeslutterEgenskap() {
sjekkBeslutterEgenskapMedAktivstatus(false);
}

private void sjekkBeslutterEgenskapMedAktivstatus(boolean status) {
var egenskaper = DBTestUtil.hentUnik(entityManager, OppgaveEgenskap.class);
assertThat(egenskaper.getAndreKriterierType()).isEqualTo(AndreKriterierType.TIL_BESLUTTER);
assertThat(egenskaper.getAktiv()).isEqualTo(status);
var oppgaver = DBTestUtil.hentAlle(entityManager, Oppgave.class);
var aktivOppgave = oppgaver.stream().filter(Oppgave::getAktiv).findFirst().orElse(null);
assertThat(aktivOppgave).isNotNull();
var egenskaper = aktivOppgave.getOppgaveEgenskaper();
if (status) {
assertThat(egenskaper.stream().map(OppgaveEgenskap::getAndreKriterierType).collect(Collectors.toSet())).contains(AndreKriterierType.TIL_BESLUTTER);
} else {
assertThat(egenskaper.stream().map(OppgaveEgenskap::getAndreKriterierType).collect(Collectors.toSet())).doesNotContain(AndreKriterierType.TIL_BESLUTTER);
}
}

private void sjekkAntallOppgaver(int antall) {
Expand Down