Skip to content

Commit

Permalink
Sett på vent bare dersom sendt oppdrag
Browse files Browse the repository at this point in the history
  • Loading branch information
jolarsen committed Jun 28, 2024
1 parent acf1b45 commit 6a1d26e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public enum Tillegsinformasjon {
PERSONOPPLYSNINGER("personopplysninger-tilbake", "soeker-personopplysninger"),
VARSELTEKST("tilbakekrevingsvarsel-fritekst"),
SØKNAD("soknad-backend"),
SENDTOPPDRAG("oppdrag-info"),
TILBAKEKREVINGSVALG("tilbakekreving-valg", "tilbakekrevingvalg"),
FAGSAK("fagsak", "fagsak"),
VERGE("verge-backend", "verge");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class SamletEksternBehandlingInfo {
private SoknadDto søknad;
private FagsakDto fagsak;
private VergeDto verge;
private SendtoppdragDto sendtoppdrag;

public EksternBehandlingsinfoDto getGrunninformasjon() {
return grunninformasjon;
Expand All @@ -39,6 +40,11 @@ public String getVarseltekst() {
return varseltekst;
}

public SendtoppdragDto getSendtoppdrag() {
check(tilleggsinformasjonHentet.contains(Tillegsinformasjon.SENDTOPPDRAG), "Utvikler-feil: har ikke hentet sendt oppdrag");
return sendtoppdrag;
}

public TilbakekrevingValgDto getTilbakekrevingsvalg() {
check(tilleggsinformasjonHentet.contains(Tillegsinformasjon.TILBAKEKREVINGSVALG), "Utvikler-feil: har ikke hentet tilbakekrevingsvalg");
return tilbakekrevingsvalg;
Expand Down Expand Up @@ -111,6 +117,11 @@ public Builder setVarseltekst(String varseltekst) {
return this;
}

public Builder setSendtoppdrag(SendtoppdragDto sendtoppdrag) {
kladd.sendtoppdrag = sendtoppdrag;
return this;
}

public Builder setVarseltekst(VarseltekstDto varseltekst) {
kladd.varseltekst = varseltekst.getVarseltekst();
return this;
Expand Down Expand Up @@ -143,6 +154,7 @@ public SamletEksternBehandlingInfo build() {
valider(Tillegsinformasjon.SØKNAD, SamletEksternBehandlingInfo::getSøknad);
valider(Tillegsinformasjon.VERGE, SamletEksternBehandlingInfo::getVerge);
valider(Tillegsinformasjon.VARSELTEKST, SamletEksternBehandlingInfo::getVarseltekst);
valider(Tillegsinformasjon.SENDTOPPDRAG, SamletEksternBehandlingInfo::getSendtoppdrag);
return kladd;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto;

public record SendtoppdragDto(String saksnummer, Long behandlingId) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.UriBuilder;

import no.nav.foreldrepenger.kontrakter.simulering.resultat.v1.FeilutbetaltePerioderDto;
import no.nav.foreldrepenger.tilbakekreving.domene.typer.Henvisning;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.Fptilbake;
Expand All @@ -20,6 +21,7 @@
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.FagsakDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.PersonopplysningDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.SamletEksternBehandlingInfo;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.SendtoppdragDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.SoknadDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.TilbakekrevingValgDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.VarseltekstDto;
Expand Down Expand Up @@ -89,6 +91,9 @@ private Optional<SamletEksternBehandlingInfo> hentBehandlingsinfoOpt(UUID ekster
if (tilleggsinformasjon.contains(Tillegsinformasjon.VARSELTEKST) && lenke.getRel().equals(Tillegsinformasjon.VARSELTEKST.getFpsakRelasjonNavn())) {
hentVarseltekst(lenke).ifPresent(builder::setVarseltekst);
}
if (tilleggsinformasjon.contains(Tillegsinformasjon.SENDTOPPDRAG) && lenke.getRel().equals(Tillegsinformasjon.SENDTOPPDRAG.getFpsakRelasjonNavn())) {
hentSendtoppdrag(lenke).ifPresent(builder::setSendtoppdrag);
}
if (tilleggsinformasjon.contains(Tillegsinformasjon.SØKNAD) && lenke.getRel().equals(Tillegsinformasjon.SØKNAD.getFpsakRelasjonNavn())) {
builder.setFamiliehendelse(hentSøknad(lenke));
}
Expand Down Expand Up @@ -184,6 +189,11 @@ private Optional<VarseltekstDto> hentVarseltekst(BehandlingResourceLinkDto resou

}

private Optional<SendtoppdragDto> hentSendtoppdrag(BehandlingResourceLinkDto resourceLink) {
URI endpoint = endpointFraLink(resourceLink);
return get(endpoint, SendtoppdragDto.class);
}

private SoknadDto hentSøknad(BehandlingResourceLinkDto resourceLink) {
URI endpoint = endpointFraLink(resourceLink);
return get(endpoint, SoknadDto.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
import java.time.LocalDate;
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;
Expand All @@ -28,6 +29,7 @@
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.SendtoppdragDto;
import no.nav.foreldrepenger.tilbakekreving.fagsystem.klient.dto.TilbakekrevingValgDto;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData;
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste;
Expand Down Expand Up @@ -65,42 +67,39 @@ public class HendelseHåndtererTjeneste {

public void håndterHendelse(HendelseTaskDataWrapper hendelseTaskDataWrapper, Henvisning henvisning, String kaller) {
var eksternBehandlingUuid = hendelseTaskDataWrapper.getBehandlingUuid();
var samletBehandlingInfo = fagsystemKlient.hentBehandlingsinfo(eksternBehandlingUuid, Tillegsinformasjon.TILBAKEKREVINGSVALG, Tillegsinformasjon.VARSELTEKST);
var samletBehandlingInfo = fagsystemKlient.hentBehandlingsinfo(eksternBehandlingUuid, Tillegsinformasjon.TILBAKEKREVINGSVALG, Tillegsinformasjon.VARSELTEKST, Tillegsinformasjon.SENDTOPPDRAG);
var tbkData = samletBehandlingInfo.getTilbakekrevingsvalg();
var åpenTilbakekreving = behandlingRepository.finnÅpenTilbakekrevingsbehandling(hendelseTaskDataWrapper.getSaksnummer())
.orElse(null);var harSendtVarselTidligere = åpenTilbakekreving != null && brevSporingRepository.harVarselBrevSendtForBehandlingId(åpenTilbakekreving.getId());
if (erRelevantHendelseForOpprettTilbakekreving(tbkData)) {
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) {
// Enten vent på nytt grunnlag / ny status - eller start på nytt med nytt varselbrev
if (samletBehandlingInfo.getVarseltekst() == null || samletBehandlingInfo.getVarseltekst().isBlank()) {
settÅpenTilbakekrevingPåVent(åpenTilbakekreving);
} else {
var loggVarsel = harSendtVarselTidligere ? "er varslet tidligere" : "ikke er varslet";
LOG.info("Mottatt VedtakHendelse {} for behandling {} har bedt om varsel og det finnes åpen tilbakekreving {} som {}",
tbkData.getVidereBehandling(), eksternBehandlingUuid.toString(), åpenTilbakekreving.getId(), loggVarsel);
// Brute-force rewind slik at det sendes nytt varsel (og man venter på grunnlag)
rewindTilbakekrevingTilStart(åpenTilbakekreving, henvisning, eksternBehandlingUuid);
}
if (erRelevantHendelseForOpprettTilbakekreving(tbkData) && eksternBehandlingRepository.harEksternBehandlingForEksternUuid(eksternBehandlingUuid)) {
LOG.info("Mottatt VedtakHendelse {} allerede opprettet tilbakekreving for henvisning={} fra {}", tbkData.getVidereBehandling(), henvisning, kaller);
}
if (erRelevantHendelseForOpprettTilbakekreving(tbkData) && åpenTilbakekreving == null) { // Skal opprette tilbakekreving
LOG.info("Mottatt VedtakHendelse {} er relevant for tilbakekreving opprett for henvisning={} fra {}", tbkData.getVidereBehandling(),
henvisning, kaller);
lagOpprettBehandlingTask(hendelseTaskDataWrapper, henvisning);
} else if (erRelevantHendelseForOpprettTilbakekreving(tbkData)) { // Håndtere at det finnes tilbakekreving
// Enten vent på nytt grunnlag / ny status - eller start på nytt med nytt varselbrev
if (samletBehandlingInfo.getVarseltekst() == null || samletBehandlingInfo.getVarseltekst().isBlank()) {
settÅpenTilbakekrevingPåVent(åpenTilbakekreving, samletBehandlingInfo.getSendtoppdrag());
} else {
LOG.info("Mottatt VedtakHendelse {} er relevant for tilbakekreving opprett for henvisning={} fra {}", tbkData.getVidereBehandling(),
henvisning, kaller);
lagOpprettBehandlingTask(hendelseTaskDataWrapper, henvisning);
var loggVarsel = harSendtVarselTidligere ? "er varslet tidligere" : "ikke er varslet";
LOG.info("Mottatt VedtakHendelse {} for behandling {} har bedt om varsel og det finnes åpen tilbakekreving {} som {}",
tbkData.getVidereBehandling(), eksternBehandlingUuid.toString(), åpenTilbakekreving.getId(), loggVarsel);
// Brute-force rewind slik at det sendes nytt varsel (og man venter på grunnlag)
rewindTilbakekrevingTilStart(åpenTilbakekreving, henvisning, eksternBehandlingUuid);
}
} else {
if (erRelevantHendelseForOppdatereTilbakekreving(tbkData)) {
LOG.info("Mottatt VedtakHendelse {} for henvisning {} var tidligere relevant for å oppdatere behandling. Nå ignoreres den",
tbkData.getVidereBehandling(), henvisning);
}
settÅpenTilbakekrevingPåVent(åpenTilbakekreving);
settÅpenTilbakekrevingPåVent(åpenTilbakekreving, samletBehandlingInfo.getSendtoppdrag());
}
}

private void settÅpenTilbakekrevingPåVent(Behandling åpenTilbakekreving) {
if (åpenTilbakekreving != null) {
private void settÅpenTilbakekrevingPåVent(Behandling åpenTilbakekreving, SendtoppdragDto oppdrag) {
if (åpenTilbakekreving != null && oppdrag != null) {
// For å redusere risiko for at det fattes vedtak basert på gammelt kravgrunnlag
// Nytt ytelsesvedtak når det finnes åpen tilbakekreving vil ofte føre til at kravgrunnlag sperres samme kveld
// Gjenoppta-batch kjører hverdager kl 07:00. Hvis helg, vent til tirsdag morgen, ellers 24 timer.
Expand Down

0 comments on commit 6a1d26e

Please sign in to comment.