Skip to content

Commit

Permalink
TFP-5599 håndter tilfelle av åpen TBK og varselbrev
Browse files Browse the repository at this point in the history
  • Loading branch information
jolarsen committed Nov 5, 2023
1 parent 31843c9 commit 12386d3
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class BehandlingRepository {
public static final String KEY_FAGSAK_ID = "fagsakId";
public static final String KEY_SAKSNUMMER = "saksnummer";
private static final String KEY_BEHANDLING_TYPE = "behandlingType";
private static final String KEY_BEHANDLING_STATUS = "behandlingStatus";

private EntityManager entityManager;

Expand Down Expand Up @@ -73,9 +74,12 @@ public List<Behandling> hentAlleBehandlingerForSaksnummer(Saksnummer saksnummer)
Objects.requireNonNull(saksnummer, KEY_SAKSNUMMER);
var query = getEntityManager().createQuery("""
SELECT beh FROM Behandling beh, Fagsak fagsak WHERE beh.fagsak.id=fagsak.id AND fagsak.saksnummer = :saksnummer
AND beh.status <>'AVSLU'
AND beh.behandlingType='BT-007'""", Behandling.class);
query.setParameter(KEY_SAKSNUMMER, saksnummer);
AND beh.status <> :behandlingStatus
AND beh.behandlingType = :behandlingType
""", Behandling.class)
.setParameter(KEY_SAKSNUMMER, saksnummer)
.setParameter(KEY_BEHANDLING_STATUS, BehandlingStatus.AVSLUTTET)
.setParameter(KEY_BEHANDLING_TYPE, BehandlingType.TILBAKEKREVING);
return hentUniktResultat(query);
}

Expand All @@ -86,10 +90,10 @@ public List<Behandling> hentBehandlingerSomIkkeErAvsluttetForFagsakId(Long fagsa
Objects.requireNonNull(fagsakId, KEY_FAGSAK_ID); //$NON-NLS-1$

var query = getEntityManager().createQuery(
"SELECT beh from Behandling beh WHERE beh.fagsak.id = :fagsakId AND beh.status <> :status", //$NON-NLS-1$
"SELECT beh from Behandling beh WHERE beh.fagsak.id = :fagsakId AND beh.status <> :behandlingStatus", //$NON-NLS-1$
Behandling.class);
query.setParameter(KEY_FAGSAK_ID, fagsakId); //$NON-NLS-1$
query.setParameter("status", BehandlingStatus.AVSLUTTET); //$NON-NLS-1$
query.setParameter(KEY_BEHANDLING_STATUS, BehandlingStatus.AVSLUTTET); //$NON-NLS-1$
query.setHint(QueryHints.HINT_READONLY, "true"); //$NON-NLS-1$
return query.getResultList();
}
Expand Down Expand Up @@ -213,12 +217,12 @@ private static Optional<Behandling> optionalFirst(List<Behandling> behandlinger)

var query = entityManager.createQuery(
"FROM Behandling behandling " +
"WHERE behandling.status <> :status " +
"WHERE behandling.status <> :behandlingStatus " +
" AND behandling.behandlendeEnhetId = :enhet ",
Behandling.class);

query.setParameter("enhet", enhetId);
query.setParameter("status", BehandlingStatus.AVSLUTTET);
query.setParameter(KEY_BEHANDLING_STATUS, BehandlingStatus.AVSLUTTET);
query.setHint(QueryHints.HINT_READONLY, "true");
return query.getResultList();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@
package no.nav.foreldrepenger.tilbakekreving.hendelser;

import java.time.LocalDateTime;
import java.util.UUID;

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.tilbakekreving.behandling.task.HendelseTaskDataWrapper;
import no.nav.foreldrepenger.tilbakekreving.behandlingskontroll.impl.BehandlingskontrollTjeneste;
import no.nav.foreldrepenger.tilbakekreving.behandlingskontroll.task.FortsettBehandlingTask;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.Behandling;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.BehandlingStegType;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.BehandlingType;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.aksjonspunkt.AksjonspunktDefinisjon;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.aksjonspunkt.Venteårsak;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.brev.BrevSporingRepository;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.ekstern.EksternBehandling;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingRepository;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.EksternBehandlingRepository;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.tilbakekrevingsvalg.VidereBehandling;
import no.nav.foreldrepenger.tilbakekreving.domene.typer.Henvisning;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.FagsystemKlient;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.Tillegsinformasjon;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.EksternBehandlingsinfoDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.SamletEksternBehandlingInfo;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.TilbakekrevingValgDto;
import no.nav.foreldrepenger.tilbakekreving.felles.Frister;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;

@ApplicationScoped
Expand All @@ -32,6 +40,7 @@ public class HendelseHåndtererTjeneste {
private BehandlingRepository behandlingRepository;
private EksternBehandlingRepository eksternBehandlingRepository;
private BrevSporingRepository brevSporingRepository;
private BehandlingskontrollTjeneste behandlingskontrollTjeneste;

HendelseHåndtererTjeneste() {
// CDI
Expand All @@ -42,12 +51,14 @@ public class HendelseHåndtererTjeneste {
FagsystemKlient fagsystemKlient,
BehandlingRepository behandlingRepository,
EksternBehandlingRepository eksternBehandlingRepository,
BrevSporingRepository brevSporingRepository) {
BrevSporingRepository brevSporingRepository,
BehandlingskontrollTjeneste behandlingskontrollTjeneste) {
this.taskTjeneste = taskTjeneste;
this.fagsystemKlient = fagsystemKlient;
this.behandlingRepository = behandlingRepository;
this.eksternBehandlingRepository = eksternBehandlingRepository;
this.brevSporingRepository = brevSporingRepository;
this.behandlingskontrollTjeneste = behandlingskontrollTjeneste;
}

public void håndterHendelse(HendelseTaskDataWrapper hendelseTaskDataWrapper, Henvisning henvisning) {
Expand All @@ -58,34 +69,44 @@ public class HendelseHåndtererTjeneste {
var eksternBehandlingUuid = hendelseTaskDataWrapper.getBehandlingUuid();
var samletBehandlingInfo = fagsystemKlient.hentBehandlingsinfo(eksternBehandlingUuid, Tillegsinformasjon.TILBAKEKREVINGSVALG, Tillegsinformasjon.VARSELTEKST);
var tbkData = samletBehandlingInfo.getTilbakekrevingsvalg();
var åpenTilbakekreving = behandlingRepository.finnÅpenTilbakekrevingsbehandling(hendelseTaskDataWrapper.getSaksnummer())
.orElse(null);
var harSendtVarselTidligere = åpenTilbakekreving != null && brevSporingRepository.harVarselBrevSendtForBehandlingId(åpenTilbakekreving.getId());
if (erRelevantHendelseForOpprettTilbakekreving(tbkData)) {
var åpenTilbakekreving = behandlingRepository.finnÅpenTilbakekrevingsbehandling(hendelseTaskDataWrapper.getSaksnummer())
.orElse(null);
if (eksternBehandlingRepository.harEksternBehandlingForEksternUuid(eksternBehandlingUuid)) {
LOG.info("Mottatt VedtakHendelse {} allerede opprettet tilbakekreving for henvisning={} fra {}", tbkData.getVidereBehandling(), henvisning, kaller);
}
// Håndter åpen TBK eller opprett ny.
if (åpenTilbakekreving != null) {
// TODO TFP-5599 - burde vi satt evt åpen TBK vent? Eller er det så kort tid før det kommer noe fra OS at det ikke er et problem?
// Enten vent nytt grunnlag / ny status - eller start på nytt med nytt varselbrev
if (samletBehandlingInfo.getVarseltekst() == null || samletBehandlingInfo.getVarseltekst().isBlank()) {
// Do nothing. Det skal ikke sendes varsel å spiller liten rolle om det er sendt tidligere varsel eller ikke
return;
// Det skal ikke sendes varsel og spiller liten rolle om det er sendt tidligere varsel eller ikke.
// TODO TFP-5599 riktig å sette på vent?
behandlingskontrollTjeneste.settBehandlingPåVentUtenSteg(åpenTilbakekreving, AksjonspunktDefinisjon.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG,
LocalDateTime.now().plus(Frister.KRAVGRUNNLAG_FØRSTE), Venteårsak.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG);
} else {
var harSendtVarselTidligere = brevSporingRepository.harVarselBrevSendtForBehandlingId(åpenTilbakekreving.getId()) ?
"er varslet tidligere" : "ikke er varslet";
LOG.info("Mottatt VedtakHendelse {} har bedt om varsel og det finnes åpen tilbakekreving som {}", tbkData.getVidereBehandling(), harSendtVarselTidligere);
var loggVarsel = harSendtVarselTidligere ? "er varslet tidligere" : "ikke er varslet";
LOG.info("Mottatt VedtakHendelse {} har bedt om varsel og det finnes åpen tilbakekreving som {}", tbkData.getVidereBehandling(), loggVarsel);
// Brute-force rewind slik at det sendes nytt varsel (og man venter på grunnlag)
rewindTilbakekrevingTilStart(åpenTilbakekreving, henvisning, eksternBehandlingUuid);
}
}
// TODO TFP-5599 vurdere else-logikk her
if (eksternBehandlingRepository.harEksternBehandlingForEksternUuid(eksternBehandlingUuid)) {
LOG.info("Mottatt VedtakHendelse {} allerede opprettet tilbakekreving for henvisning={} fra {}", tbkData.getVidereBehandling(), henvisning, kaller);
} else {
LOG.info("Mottatt VedtakHendelse {} er relevant for tilbakekreving opprett for henvisning={} fra {}", tbkData.getVidereBehandling(), henvisning, kaller);
LOG.info("Mottatt VedtakHendelse {} er relevant for tilbakekreving opprett for henvisning={} fra {}", tbkData.getVidereBehandling(),
henvisning, kaller);
lagOpprettBehandlingTask(hendelseTaskDataWrapper, henvisning);
}
} else if (erRelevantHendelseForOppdatereTilbakekreving(tbkData)) {
// TODO TFP-5599 - burde denne satt evt åpen TBK på vent? Eller er det så kort tid før det kommer noe fra OS at det ikke er et problem?
LOG.info("Mottatt VedtakHendelse {} for henvisning={} var tidligere relevant for å oppdatere behandling. Nå ignoreres den",
LOG.info("Mottatt VedtakHendelse {} for henvisning {} var tidligere relevant for å oppdatere behandling. Nå ignoreres den",
tbkData.getVidereBehandling(), henvisning);
// TODO TFP-5599 riktig å sette på vent?
if (åpenTilbakekreving != null) {
behandlingskontrollTjeneste.settBehandlingPåVentUtenSteg(åpenTilbakekreving, AksjonspunktDefinisjon.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG,
LocalDateTime.now().plus(Frister.KRAVGRUNNLAG_FØRSTE), Venteårsak.VENT_PÅ_TILBAKEKREVINGSGRUNNLAG);
}
}
}


public Henvisning hentHenvisning(UUID behandling) {
return fagsystemKlient.hentBehandlingOptional(behandling)
.map(EksternBehandlingsinfoDto::getHenvisning)
Expand All @@ -112,4 +133,20 @@ private void lagOpprettBehandlingTask(HendelseTaskDataWrapper hendelseTaskDataWr

taskTjeneste.lagre(taskData.getProsessTaskData());
}

private void rewindTilbakekrevingTilStart(Behandling åpenTilbakekreving, Henvisning henvisning, UUID eksternBehandlingUuid) {
EksternBehandling eksternBehandling = new EksternBehandling(åpenTilbakekreving, henvisning, eksternBehandlingUuid);
eksternBehandlingRepository.lagre(eksternBehandling);
var kontekst = behandlingskontrollTjeneste.initBehandlingskontroll(åpenTilbakekreving);
behandlingskontrollTjeneste.taBehandlingAvVentSetAlleAutopunktUtført(åpenTilbakekreving, kontekst);
behandlingskontrollTjeneste.behandlingTilbakeføringTilTidligereBehandlingSteg(kontekst, BehandlingStegType.INOPPSTEG);
lagFortsettBehandlingTask(åpenTilbakekreving);
}

private void lagFortsettBehandlingTask(Behandling behandling) {
ProsessTaskData taskData = ProsessTaskData.forProsessTask(FortsettBehandlingTask.class);
taskData.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
taskData.setCallIdFraEksisterende();
taskTjeneste.lagre(taskData);
}
}

0 comments on commit 12386d3

Please sign in to comment.