Skip to content

Commit

Permalink
TFP-5637 - legger inn eksternReferanse ved opprettJournalpost. (#2718)
Browse files Browse the repository at this point in the history
* TFP-5637 - legger inn eksternReferanse ved opprettJournalpost.

* Legger inn BESTILLING_UUID på taskene.

* Sonar og fjerner fritekst.
  • Loading branch information
mrsladek committed Nov 30, 2023
1 parent e1b0811 commit 5e75ba0
Show file tree
Hide file tree
Showing 29 changed files with 164 additions and 323 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@
import no.nav.foreldrepenger.tilbakekreving.domene.typer.Henvisning;
import no.nav.foreldrepenger.tilbakekreving.felles.Periode;
import no.nav.foreldrepenger.tilbakekreving.grunnlag.kodeverk.KlasseType;
import no.nav.vedtak.exception.IntegrasjonException;
import no.nav.vedtak.exception.VLException;

public class KravgrunnlagValidator {

private KravgrunnlagValidator() {
}

private static final List<Consumer<Kravgrunnlag431>> VALIDATORER = List.of(
KravgrunnlagValidator::validerPeriodeInnenforMåned,
KravgrunnlagValidator::validerOverlappendePerioder,
Expand Down Expand Up @@ -75,7 +78,7 @@ private static void validerOverlappendePerioder(Kravgrunnlag431 kravgrunnlag) {
List<Periode> sortertePerioder = kravgrunnlag.getPerioder().stream()
.map(KravgrunnlagPeriode432::getPeriode)
.sorted(Comparator.comparing(Periode::getFom))
.collect(Collectors.toList());
.toList();
for (int i = 1; i < sortertePerioder.size(); i++) {
Periode forrige = sortertePerioder.get(i - 1);
Periode denne = sortertePerioder.get(i);
Expand Down Expand Up @@ -173,59 +176,59 @@ private static void validerYtelPosteringTilbakekrevesMotNyttOgOpprinneligUtbetal
return YearMonth.of(fom.getYear(), fom.getMonth());
}

public static class UgyldigKravgrunnlagException extends IntegrasjonException {
public static class UgyldigKravgrunnlagException extends VLException {
public UgyldigKravgrunnlagException(String kode, String message) {
super(kode, message);
super(kode, message, null);
}
}

public static class KravgrunnlagFeil {

static IntegrasjonException manglerFelt(String felt, Periode periode) {
static UgyldigKravgrunnlagException manglerFelt(String felt, Periode periode) {
return new UgyldigKravgrunnlagException("FPT-879715", String.format("Ugyldig kravgrunnlag. Mangler forventet felt %s for periode %s.", felt, periode));
}

static IntegrasjonException manglerReferanse(String kravgrunnlagId) {
static UgyldigKravgrunnlagException manglerReferanse(String kravgrunnlagId) {
return new UgyldigKravgrunnlagException("FPT-879716", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Mangler referanse.", kravgrunnlagId));
}

static IntegrasjonException overlappendePerioder(String kravgrunnlagId, Periode a, Periode b) {
static UgyldigKravgrunnlagException overlappendePerioder(String kravgrunnlagId, Periode a, Periode b) {
return new UgyldigKravgrunnlagException("FPT-936521", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Overlappende perioder %s og %s.", kravgrunnlagId, a, b));
}

static IntegrasjonException manglerKlasseTypeFeil(String kravgrunnlagId, Periode periode) {
static UgyldigKravgrunnlagException manglerKlasseTypeFeil(String kravgrunnlagId, Periode periode) {
return new UgyldigKravgrunnlagException("FPT-727260", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Perioden %s mangler postering med klasseType=FEIL.", kravgrunnlagId, periode));
}

static IntegrasjonException manglerKlasseTypeYtel(String kravgrunnlagId, Periode periode) {
static UgyldigKravgrunnlagException manglerKlasseTypeYtel(String kravgrunnlagId, Periode periode) {
return new UgyldigKravgrunnlagException("FPT-727261", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Perioden %s mangler postering med klasseType=YTEL.", kravgrunnlagId, periode));
}

static IntegrasjonException periodeIkkInnenforMåned(String kravgrunnlagId, Periode periode) {
static UgyldigKravgrunnlagException periodeIkkInnenforMåned(String kravgrunnlagId, Periode periode) {
return new UgyldigKravgrunnlagException("FPT-438893", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Perioden %s er ikke innenfor en kalendermåned.", kravgrunnlagId, periode));
}

static IntegrasjonException manglerMaksSkatt(YearMonth måned) {
static UgyldigKravgrunnlagException manglerMaksSkatt(YearMonth måned) {
return new UgyldigKravgrunnlagException("FPT-734548", String.format("Ugyldig kravgrunnlag. Mangler max skatt for måned %s", måned));
}

static IntegrasjonException feilSkatt(YearMonth måned) {
static UgyldigKravgrunnlagException feilSkatt(YearMonth måned) {
return new UgyldigKravgrunnlagException("FPT-560295", String.format("Ugyldig kravgrunnlag. For måned %s er opplyses ulike verdier maks skatt i ulike perioder", måned));
}

static IntegrasjonException feilSkatt(YearMonth måned, BigDecimal maxSkatt, BigDecimal maxUtregnbarSkatt) {
static UgyldigKravgrunnlagException feilSkatt(YearMonth måned, BigDecimal maxSkatt, BigDecimal maxUtregnbarSkatt) {
return new UgyldigKravgrunnlagException("FPT-930235", String.format("Ugyldig kravgrunnlag. For måned %s er maks skatt %s, men maks tilbakekreving ganget med skattesats blir %s", måned, maxSkatt, maxUtregnbarSkatt));
}

static IntegrasjonException feilYtelseEllerFeilutbetaling(String kravgrunnlagId, Periode periode, BigDecimal sumTilbakekrevingYtel, BigDecimal belopNyttFraFeilpostering) {
static UgyldigKravgrunnlagException feilYtelseEllerFeilutbetaling(String kravgrunnlagId, Periode periode, BigDecimal sumTilbakekrevingYtel, BigDecimal belopNyttFraFeilpostering) {
return new UgyldigKravgrunnlagException("FPT-361605", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. For periode %s er sum tilkakekreving fra YTEL %s, mens belopNytt i FEIL er %s. Det er forventet at disse er like.", kravgrunnlagId, periode, sumTilbakekrevingYtel, belopNyttFraFeilpostering));
}

static IntegrasjonException ytelPosteringHvorTilbakekrevesIkkeStemmerMedNyttOgOpprinneligBeløp(String kravgrunnlagId, Periode periode, BigDecimal tilbakekrevesBeløp, BigDecimal nyttBeløp, BigDecimal opprinneligBeløp) {
static UgyldigKravgrunnlagException ytelPosteringHvorTilbakekrevesIkkeStemmerMedNyttOgOpprinneligBeløp(String kravgrunnlagId, Periode periode, BigDecimal tilbakekrevesBeløp, BigDecimal nyttBeløp, BigDecimal opprinneligBeløp) {
return new UgyldigKravgrunnlagException("FPT-615761", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. For perioden %s finnes YTEL-postering med tilbakekrevesBeløp %s som er større enn differanse mellom nyttBeløp %s og opprinneligBeløp %s", kravgrunnlagId, periode, tilbakekrevesBeløp, nyttBeløp, opprinneligBeløp));
}

static IntegrasjonException feilBeløp(String kravgrunnlagId, Periode periode) {
static UgyldigKravgrunnlagException feilBeløp(String kravgrunnlagId, Periode periode) {
return new UgyldigKravgrunnlagException("FPT-930247", String.format("Ugyldig kravgrunnlag for kravgrunnlagId %s. Perioden %s har FEIL postering med negativ beløp", kravgrunnlagId, periode));
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.foreldrepenger.tilbakekreving.behandling.steg.henleggelse;

import java.time.LocalDate;
import java.util.UUID;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
Expand Down Expand Up @@ -35,7 +36,6 @@ public class HenleggBehandlingTjeneste {
private BehandlingskontrollTjeneste behandlingskontrollTjeneste;
private HistorikkinnslagTjeneste historikkinnslagTjeneste;

static final TaskType HENLEGGELSESBREV_TASK_TYPE = TaskType.forProsessTask(SendHenleggelsesbrevTask.class);
private static final long OPPRETTELSE_DAGER_BEGRENSNING = 6L;

HenleggBehandlingTjeneste() {
Expand Down Expand Up @@ -106,9 +106,10 @@ private void doHenleggBehandling(long behandlingId, BehandlingResultatType årsa
}

private void sendHenleggelsesbrev(Behandling behandling, String fritekst) {
var henleggelseBrevTask = ProsessTaskData.forTaskType(HENLEGGELSESBREV_TASK_TYPE);
var henleggelseBrevTask = ProsessTaskData.forTaskType(TaskType.forProsessTask(SendHenleggelsesbrevTask.class));
henleggelseBrevTask.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
henleggelseBrevTask.setPayload(fritekst);
henleggelseBrevTask.setProperty(SendHenleggelsesbrevTask.BESTILLING_UUID, UUID.randomUUID().toString()); // Brukes som eksternReferanseId ved journalføring av brev
henleggelseBrevTask.setCallIdFraEksisterende();
taskTjeneste.lagre(henleggelseBrevTask);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.foreldrepenger.tilbakekreving.behandling.steg.iverksettvedtak;

import java.util.UUID;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.Behandling;
Expand All @@ -26,7 +28,7 @@ public void opprettIverksettingstasker(Behandling behandling, boolean sendVedtak
var taskGruppe = new ProsessTaskGruppe();
taskGruppe.addNesteSekvensiell(ProsessTaskData.forProsessTask(SendVedtakTilOppdragsystemetTask.class));
if (sendVedtaksbrev) {
taskGruppe.addNesteSekvensiell(ProsessTaskData.forProsessTask(SendVedtaksbrevTask.class));
opprettVedtaksbrevProsessTask(taskGruppe);
}
taskGruppe.addNesteSekvensiell(ProsessTaskData.forProsessTask(AvsluttBehandlingTask.class));
taskGruppe.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
Expand All @@ -36,10 +38,17 @@ public void opprettIverksettingstasker(Behandling behandling, boolean sendVedtak
taskTjeneste.lagre(taskGruppe);
}

private static void opprettVedtaksbrevProsessTask(ProsessTaskGruppe taskGruppe) {
var taskData = ProsessTaskData.forProsessTask(SendVedtaksbrevTask.class);
taskData.setProperty(SendVedtaksbrevTask.BESTILLING_UUID,
UUID.randomUUID().toString()); // Brukes som eksternReferanseId ved journalføring av brev
taskGruppe.addNesteSekvensiell(taskData);
}

private void opprettDvhProsessTask(Behandling behandling, ProsessTaskGruppe taskGruppe) {
ProsessTaskData dvhProsessTaskData = ProsessTaskData.forProsessTask(SendVedtakHendelserTilDvhTask.class);
dvhProsessTaskData.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
taskGruppe.addNesteSekvensiell(dvhProsessTaskData);
var taskData = ProsessTaskData.forProsessTask(SendVedtakHendelserTilDvhTask.class);
taskData.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
taskGruppe.addNesteSekvensiell(taskData);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@
import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler;
import no.nav.vedtak.log.mdc.MdcExtendedLogContext;

import java.util.Optional;
import java.util.UUID;

@ApplicationScoped
@ProsessTask("iverksetteVedtak.sendVedtaksbrev")
@FagsakProsesstaskRekkefølge(gruppeSekvens = false)
public class SendVedtaksbrevTask implements ProsessTaskHandler {

public static final String BESTILLING_UUID = "bestillingUuid";

private static final Logger log = LoggerFactory.getLogger(SendVedtaksbrevTask.class);
private static final MdcExtendedLogContext LOG_CONTEXT = MdcExtendedLogContext.getContext("prosess");

Expand All @@ -41,11 +46,12 @@ public SendVedtaksbrevTask(VergeRepository vergeRepository,
@Override
public void doTask(ProsessTaskData prosessTaskData) {
Long behandlingId = ProsessTaskDataWrapper.wrap(prosessTaskData).getBehandlingId();
var unikBestillingUuid = UUID.fromString(Optional.ofNullable(prosessTaskData.getPropertyValue(BESTILLING_UUID)).orElse(UUID.randomUUID().toString()));
LOG_CONTEXT.add("behandling", behandlingId);
if (vergeRepository.finnesVerge(behandlingId)) {
vedtaksbrevTjeneste.sendVedtaksbrev(behandlingId, BrevMottaker.VERGE);
vedtaksbrevTjeneste.sendVedtaksbrev(behandlingId, BrevMottaker.VERGE, unikBestillingUuid);
}
vedtaksbrevTjeneste.sendVedtaksbrev(behandlingId, BrevMottaker.BRUKER);
vedtaksbrevTjeneste.sendVedtaksbrev(behandlingId, BrevMottaker.BRUKER, unikBestillingUuid);
log.info("Utført for behandling: {}", behandlingId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Optional;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.UUID;

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

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import no.nav.foreldrepenger.tilbakekreving.behandlingskontroll.BehandleStegResultat;
import no.nav.foreldrepenger.tilbakekreving.behandlingskontroll.BehandlingSteg;
import no.nav.foreldrepenger.tilbakekreving.behandlingskontroll.BehandlingStegRef;
Expand Down Expand Up @@ -106,6 +106,8 @@ private void opprettSendVarselTask(Behandling behandling) {
private void sendVarsel(Behandling behandling, ProsessTaskGruppe taskGruppe) {
ProsessTaskData sendVarselbrev = ProsessTaskData.forProsessTask(SendVarselbrevTask.class);
sendVarselbrev.setBehandling(behandling.getFagsakId(), behandling.getId(), behandling.getAktørId().getId());
sendVarselbrev.setProperty(SendVarselbrevTask.BESTILLING_UUID, UUID.randomUUID().toString()); // Brukes som eksternReferanseId ved journalføring av brev
sendVarselbrev.setCallIdFraEksisterende();
taskGruppe.addNesteSekvensiell(sendVarselbrev);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import java.time.LocalDateTime;
import java.util.List;

import no.nav.foreldrepenger.tilbakekreving.dokumentbestilling.henleggelse.SendHenleggelsesbrevTask;
import no.nav.vedtak.felles.prosesstask.api.TaskType;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -194,7 +196,7 @@ void kan_sende_henleggelsesbrev() {
verify(taskTjeneste, times(1)).lagre(captor.capture());
var prosessTaskData = captor.getAllValues();
assertThat(prosessTaskData).isNotEmpty();
assertThat(prosessTaskData.get(0).taskType()).isEqualTo(HenleggBehandlingTjeneste.HENLEGGELSESBREV_TASK_TYPE);
assertThat(prosessTaskData.get(0).taskType()).isEqualTo(TaskType.forProsessTask(SendHenleggelsesbrevTask.class));
assertHenleggelse(internBehandlingId);
}

Expand All @@ -208,7 +210,7 @@ void kan_sende_henleggelsesbrev_for_tilbakekreving_revurdering_med_henlagt_feilo
verify(taskTjeneste, times(1)).lagre(captor.capture());
var prosessTaskData = captor.getAllValues();
assertThat(prosessTaskData).isNotEmpty();
assertThat(prosessTaskData.get(0).taskType()).isEqualTo(HenleggBehandlingTjeneste.HENLEGGELSESBREV_TASK_TYPE);
assertThat(prosessTaskData.get(0).taskType()).isEqualTo(TaskType.forProsessTask(SendHenleggelsesbrevTask.class));
assertHenleggelse(revuderingBehandlingId);
}

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.UUID;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
Expand Down Expand Up @@ -122,10 +123,10 @@ private boolean sjekkOmTilgjengelig(Behandling behandling, DokumentMalType mal)

var sendVarselbrev = ProsessTaskData.forProsessTask(SendManueltVarselbrevTask.class);
sendVarselbrev.setProperty(SendManueltVarselbrevTask.MAL_TYPE, malType.getKode());
sendVarselbrev.setProperty(SendManueltVarselbrevTask.BESTILLING_UUID, UUID.randomUUID().toString()); // Brukes som eksternReferanseId ved journalføring av brev
sendVarselbrev.setPayload(fritekst);
sendVarselbrev.setBehandling(behandling.getFagsakId(), behandlingId, behandling.getAktørId().getId());
sendVarselbrev.setCallIdFraEksisterende();

taskTjeneste.lagre(sendVarselbrev);
}

Expand All @@ -136,9 +137,10 @@ private boolean sjekkOmTilgjengelig(Behandling behandling, DokumentMalType mal)
}

var sendInnhentDokumentasjonBrev = ProsessTaskData.forProsessTask(InnhentDokumentasjonbrevTask.class);
sendInnhentDokumentasjonBrev.setProperty(InnhentDokumentasjonbrevTask.BESTILLING_UUID, UUID.randomUUID().toString()); // Brukes som eksternReferanseId ved journalføring av brev
sendInnhentDokumentasjonBrev.setPayload(fritekst);
sendInnhentDokumentasjonBrev.setBehandling(behandling.getFagsakId(), behandlingId, behandling.getAktørId().getId());

sendInnhentDokumentasjonBrev.setCallIdFraEksisterende();
taskTjeneste.lagre(sendInnhentDokumentasjonBrev);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package no.nav.foreldrepenger.tilbakekreving.dokumentbestilling.felles.pdf;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.Objects;
import java.util.UUID;

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

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.aktør.Adresseinfo;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.Behandling;
import no.nav.foreldrepenger.tilbakekreving.behandlingslager.behandling.repository.BehandlingRepository;
Expand Down Expand Up @@ -74,10 +76,12 @@ private AvsenderMottaker lagMottakerVerge(Long behandlingId) {
}
}

public JournalpostIdOgDokumentId journalførUtgåendeBrev(Long behandlingId, String dokumentkategori, BrevMetadata brevMetadata, BrevMottaker brevMottaker, byte[] vedleggPdf) {
public JournalpostIdOgDokumentId journalførUtgåendeBrev(Long behandlingId, String dokumentkategori, BrevMetadata brevMetadata, BrevMottaker brevMottaker, byte[] vedleggPdf,
UUID unikBestillingUuid) {
LOG.info("Starter journalføring av {} til {} for behandlingId={}", dokumentkategori, brevMottaker, behandlingId);

boolean forsøkFerdigstill = true;
Objects.requireNonNull(unikBestillingUuid, "Bestilling UUID kan ikke være null");

Behandling behandling = behandlingRepository.hentBehandling(behandlingId);
var request = OpprettJournalpostRequest.nyUtgående()
.medTema(utledTema(behandling.getFagsak().getFagsakYtelseType()))
Expand All @@ -92,9 +96,10 @@ private AvsenderMottaker lagMottakerVerge(Long behandlingId) {
.medTittel(brevMetadata.getTittel())
.medBrevkode(brevMetadata.getFagsaktype().getKode() + "-TILB")
.leggTilDokumentvariant(new Dokumentvariant(Dokumentvariant.Variantformat.ARKIV, Dokumentvariant.Filtype.PDFA, vedleggPdf)))
.medEksternReferanseId(unikBestillingUuid + "-" + brevMottaker.name()) //Brev til bruker og ev. verge produseres med lik bestillingUuid fra samme task.
.build();

var response = dokArkivKlient.opprettJournalpost(request, forsøkFerdigstill);
var response = dokArkivKlient.opprettJournalpost(request, true);
JournalpostId journalpostId = new JournalpostId(response.journalpostId());
if (response.dokumenter().size() != 1) {
throw uforventetAntallDokumenterIRespons(response.dokumenter().size());
Expand Down

0 comments on commit 5e75ba0

Please sign in to comment.