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

TFP-5637 - legger inn eksternReferanse ved opprettJournalpost. #2718

Merged
merged 3 commits into from
Nov 30, 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 @@ -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()));
mrsladek marked this conversation as resolved.
Show resolved Hide resolved
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
Loading