Skip to content

Commit

Permalink
Endre rekkefølge i opprett og ferdigstill brev og bruker eksisterende…
Browse files Browse the repository at this point in the history
… metode for ferdigstill/distribuer
  • Loading branch information
Bjodn committed Nov 12, 2024
1 parent 27a9c5c commit 93def4a
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import no.nav.etterlatte.brev.hentinformasjon.grunnlag.GrunnlagService
import no.nav.etterlatte.brev.model.BrevInnholdVedlegg
import no.nav.etterlatte.brev.model.FerdigstillJournalFoerOgDistribuerOpprettetBrev
import no.nav.etterlatte.brev.model.Mottaker
import no.nav.etterlatte.brev.model.OpprettBrevRequest
import no.nav.etterlatte.brev.model.OpprettJournalfoerOgDistribuerRequest
import no.nav.etterlatte.brev.model.Spraak
import no.nav.etterlatte.brev.pdf.PDFService
Expand Down Expand Up @@ -284,11 +285,11 @@ fun Route.brevRoute(
}
}

post("opprett-for-omregning") {
post("opprett-brev") {
kunSystembruker { systembruker ->
withSakId(tilgangssjekker, skrivetilgang = true) {
val req = call.receive<OpprettJournalfoerOgDistribuerRequest>()
val brevErDistribuert = service.opprettOgFerdigstillOmregning(systembruker, req)
val req = call.receive<OpprettBrevRequest>()
val brevErDistribuert = service.opprettBrev(systembruker, req)
call.respond(brevErDistribuert)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import no.nav.etterlatte.brev.model.Brev
import no.nav.etterlatte.brev.model.BrevDistribusjonResponse
import no.nav.etterlatte.brev.model.BrevID
import no.nav.etterlatte.brev.model.BrevInnholdVedlegg
import no.nav.etterlatte.brev.model.BrevOpprettResponse
import no.nav.etterlatte.brev.model.BrevProsessType
import no.nav.etterlatte.brev.model.BrevStatusResponse
import no.nav.etterlatte.brev.model.FerdigstillJournalFoerOgDistribuerOpprettetBrev
import no.nav.etterlatte.brev.model.Mottaker
import no.nav.etterlatte.brev.model.MottakerType
import no.nav.etterlatte.brev.model.OpprettBrevRequest
import no.nav.etterlatte.brev.model.OpprettJournalfoerOgDistribuerRequest
import no.nav.etterlatte.brev.model.Pdf
import no.nav.etterlatte.brev.model.Spraak
Expand Down Expand Up @@ -86,45 +88,24 @@ class BrevService(
"Feil opp sto under ferdigstill/journalfør/distribuer av brevID=$brevId, status: ${oppdatertBrev.status}",
e,
)
if (req.oppgaveVedFeil) {
oppgaveService.opprettOppgaveForFeiletBrev(req.sakId, brevId, bruker)
}
oppgaveService.opprettOppgaveForFeiletBrev(req.sakId, brevId, bruker)
return BrevDistribusjonResponse(brevId, false)
}
}

/*
* Brukes ved automatisk omregning hvis behandlingen skal stoppe etter fattet vedtak
*/
suspend fun opprettOgFerdigstillOmregning(
suspend fun opprettBrev(
bruker: BrukerTokenInfo,
req: OpprettJournalfoerOgDistribuerRequest,
): BrevDistribusjonResponse {
req: OpprettBrevRequest,
): BrevOpprettResponse {
val (brev, enhetsnummer) =
brevoppretter.opprettBrevSomHarInnhold(
sakId = req.sakId,
behandlingId = null,
behandlingId = req.behandlingId,
bruker = bruker,
brevKode = req.brevKode,
brevData = req.brevParametereAutomatisk.brevDataMapping(),
)
val brevId = brev.id

pdfGenerator.ferdigstillOgGenererPDF(
brevId,
bruker,
avsenderRequest = { _, _, _ ->
AvsenderRequest(
saksbehandlerIdent = req.avsenderRequest.saksbehandlerIdent,
attestantIdent = req.avsenderRequest.attestantIdent,
sakenhet = enhetsnummer,
)
},
brevKodeMapping = { req.brevKode },
brevDataMapping = { ManueltBrevMedTittelData(it.innholdMedVedlegg.innhold(), it.tittel) },
)

return BrevDistribusjonResponse(brevId, false)
return BrevOpprettResponse(brev.id, enhetsnummer)
}

suspend fun ferdigstillBrevJournalfoerOgDistribuerforOpprettetBrev(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import io.ktor.client.request.setBody
import io.ktor.http.ContentType
import io.ktor.http.contentType
import kotlinx.coroutines.runBlocking
import no.nav.etterlatte.brev.model.BrevDistribusjonResponse
import no.nav.etterlatte.brev.model.OpprettJournalfoerOgDistribuerRequest
import no.nav.etterlatte.brev.model.BrevOpprettResponse
import no.nav.etterlatte.brev.model.BrevStatusResponse
import no.nav.etterlatte.brev.model.FerdigstillJournalFoerOgDistribuerOpprettetBrev
import no.nav.etterlatte.brev.model.OpprettBrevRequest
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
import no.nav.etterlatte.libs.common.retryOgPakkUt
import no.nav.etterlatte.libs.common.sak.SakId
Expand All @@ -25,37 +27,37 @@ class BrevKlient(

internal fun opprettBrev(
sakid: SakId,
opprett: OpprettJournalfoerOgDistribuerRequest,
): BrevDistribusjonResponse =
opprett: OpprettBrevRequest,
): BrevOpprettResponse =
runBlocking {
try {
logger.info("Oppretter brev uten distribusjon for sak med sakId=$sakid")
retryOgPakkUt(times = 5, vent = { timesleft -> Thread.sleep(Duration.ofSeconds(1L * timesleft)) }) {
httpClient
.post("$url/api/brev/sak/${sakid.sakId}/opprett-for-omregning") {
.post("$url/api/brev/sak/${sakid.sakId}/opprett-brev") {
contentType(ContentType.Application.Json)
setBody(opprett.toJson())
}.body<BrevDistribusjonResponse>()
}.body<BrevOpprettResponse>()
}
} catch (e: ResponseException) {
logger.error("Opprettelse av brev feilet for sak med sakId=$sakid feilet", e)
throw InternfeilException("Kunne ikke opprette brev for sak: $sakid")
}
}

internal fun opprettJournalFoerOgDistribuer(
internal fun ferdigstillJournalfoerDistribuerBrev(
sakid: SakId,
opprett: OpprettJournalfoerOgDistribuerRequest,
): BrevDistribusjonResponse =
request: FerdigstillJournalFoerOgDistribuerOpprettetBrev,
): BrevStatusResponse =
runBlocking {
try {
logger.info("Oppretter brev uten distribusjon for sak med sakId=$sakid")
retryOgPakkUt(times = 5, vent = { timesleft -> Thread.sleep(Duration.ofSeconds(1L * timesleft)) }) {
httpClient
.post("$url/api/brev/sak/${sakid.sakId}/opprett-journalfoer-og-distribuer") {
.post("$url/api/brev/sak/${sakid.sakId}/ferdigstill-journalfoer-og-distribuer") {
contentType(ContentType.Application.Json)
setBody(opprett.toJson())
}.body<BrevDistribusjonResponse>()
setBody(request.toJson())
}.body<BrevStatusResponse>()
}
} catch (e: ResponseException) {
logger.error("Opprettelse av brev feilet for sak med sakId=$sakid feilet", e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import no.nav.etterlatte.VedtakService
import no.nav.etterlatte.brev.BrevParametereAutomatisk
import no.nav.etterlatte.brev.Brevkoder
import no.nav.etterlatte.brev.SaksbehandlerOgAttestant
import no.nav.etterlatte.brev.model.OpprettJournalfoerOgDistribuerRequest
import no.nav.etterlatte.brev.model.BrevOpprettResponse
import no.nav.etterlatte.brev.model.FerdigstillJournalFoerOgDistribuerOpprettetBrev
import no.nav.etterlatte.brev.model.OpprettBrevRequest
import no.nav.etterlatte.funksjonsbrytere.FeatureToggleService
import no.nav.etterlatte.libs.common.behandling.Revurderingaarsak
import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException
Expand Down Expand Up @@ -64,37 +66,42 @@ internal class OpprettVedtakforespoerselRiver(
logger.info("Leser opprett-vedtak forespoersel for sak $sakId")
val behandlingId = omregningData.hentBehandlingId()
val dato = omregningData.hentFraDato()
val revurderingaarsak = omregningData.revurderingaarsak

val kunFatteVedtak = featureToggleService.isEnabled(ReguleringFeatureToggle.SkalStoppeEtterFattetVedtak, false)
val skalSendeBrev =
when (omregningData.revurderingaarsak) {
Revurderingaarsak.AARLIG_INNTEKTSJUSTERING -> true
else -> false
}

val respons =
if (kunFatteVedtak) {
opprettBrev(skalSendeBrev, sakId, behandlingId, omregningData.revurderingaarsak)
vedtak.opprettVedtakOgFatt(sakId, behandlingId)
} else {
when (omregningData.utbetalingVerifikasjon) {
UtbetalingVerifikasjon.INGEN -> vedtak.opprettVedtakFattOgAttester(sakId, behandlingId)
UtbetalingVerifikasjon.SIMULERING -> {
vedtak.opprettVedtakOgFatt(sakId, behandlingId)
val brevResp = opprettBrev(skalSendeBrev, sakId, behandlingId, revurderingaarsak)

verifiserUendretUtbetaling(behandlingId, skalAvbryte = false)
ferdigstillBrev(skalSendeBrev, sakId, revurderingaarsak, brevResp)
vedtak.attesterVedtak(sakId, behandlingId)
}

UtbetalingVerifikasjon.SIMULERING_AVBRYT_ETTERBETALING_ELLER_TILBAKEKREVING -> {
vedtak.opprettVedtakOgFatt(sakId, behandlingId)
val brevResp = opprettBrev(skalSendeBrev, sakId, behandlingId, revurderingaarsak)

verifiserUendretUtbetaling(behandlingId, skalAvbryte = true)
ferdigstillBrev(skalSendeBrev, sakId, revurderingaarsak, brevResp)
vedtak.attesterVedtak(sakId, behandlingId)
}
}
}

val skalSendeBrev =
when (omregningData.revurderingaarsak) {
Revurderingaarsak.AARLIG_INNTEKTSJUSTERING -> true
else -> false
}
if (skalSendeBrev) {
opprettBrev(sakId, kunFatteVedtak, omregningData.revurderingaarsak)
}

hentBeloep(respons, dato)?.let { packet[ReguleringEvents.VEDTAK_BELOEP] = it }
logger.info("Opprettet vedtak ${respons.vedtak.id} for sak: $sakId og behandling: $behandlingId")
RapidUtsender.sendUt(respons, packet, context)
Expand Down Expand Up @@ -136,28 +143,55 @@ internal class OpprettVedtakforespoerselRiver(
}

private fun opprettBrev(
skalSendeBrev: Boolean,
sakId: SakId,
kunFatteVedtak: Boolean,
behandlingId: UUID,
revurderingaarsak: Revurderingaarsak,
) {
): BrevOpprettResponse? {
if (!skalSendeBrev) {
return null
}

val brevRequest =
when (revurderingaarsak) {
Revurderingaarsak.AARLIG_INNTEKTSJUSTERING ->
OpprettJournalfoerOgDistribuerRequest(
OpprettBrevRequest(
brevKode = Brevkoder.OMS_INNTEKTSJUSTERING_VARSEL,
brevParametereAutomatisk = BrevParametereAutomatisk.OmstillingsstoenadInntektsjusteringRedigerbar(),
avsenderRequest = SaksbehandlerOgAttestant(Fagsaksystem.EY.navn, Fagsaksystem.EY.navn),
sakId = sakId,
oppgaveVedFeil = false,
behandlingId = behandlingId,
)

else -> throw InternfeilException("Støtter ikke brev under automatisk omregning for $revurderingaarsak")
}
if (kunFatteVedtak) {
brevKlient.opprettBrev(sakId, brevRequest)
} else {
brevKlient.opprettJournalFoerOgDistribuer(sakId, brevRequest)
return brevKlient.opprettBrev(sakId, brevRequest)
}

private fun ferdigstillBrev(
skalSendeBrev: Boolean,
sakId: SakId,
revurderingaarsak: Revurderingaarsak,
brevResponse: BrevOpprettResponse?,
) {
if (!skalSendeBrev) {
return
}
val (brevId, enhetsnummer) =
brevResponse
?: throw InternfeilException("Mangler brevrespons fra opprettelse av brev for $sakId")
val brevRequest =
when (revurderingaarsak) {
Revurderingaarsak.AARLIG_INNTEKTSJUSTERING ->
FerdigstillJournalFoerOgDistribuerOpprettetBrev(
brevId = brevId,
sakId = sakId,
enhetsnummer = enhetsnummer,
avsenderRequest = SaksbehandlerOgAttestant(Fagsaksystem.EY.navn, Fagsaksystem.EY.navn),
)

else -> throw InternfeilException("Støtter ikke brev under automatisk omregning for $revurderingaarsak")
}
brevKlient.ferdigstillJournalfoerDistribuerBrev(sakId, brevRequest)
}

private fun hentBeloep(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,6 @@ internal class OpprettVedtakforespoerselRiverTest {
inspector.sendTestMessage(melding.toJson())

verify { vedtakServiceMock.opprettVedtakFattOgAttester(sakId, behandlingId) }
verify { brevKlientMock.opprettJournalFoerOgDistribuer(sakId, any()) }
verify { brevKlientMock.ferdigstillJournalfoerDistribuerBrev(sakId, any()) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,13 @@ data class OpprettJournalfoerOgDistribuerRequest(
val brevParametereAutomatisk: BrevParametereAutomatisk,
val avsenderRequest: SaksbehandlerOgAttestant,
val sakId: SakId,
val oppgaveVedFeil: Boolean = true,
)

data class OpprettBrevRequest(
val brevKode: Brevkoder,
val brevParametereAutomatisk: BrevParametereAutomatisk,
val sakId: SakId,
val behandlingId: UUID,
)

data class FerdigstillJournalFoerOgDistribuerOpprettetBrev(
Expand Down Expand Up @@ -159,3 +165,8 @@ data class BrevDistribusjonResponse(
val brevId: BrevID,
val erDistribuert: Boolean,
)

data class BrevOpprettResponse(
val brevId: BrevID,
val enhetsnummer: Enhetsnummer,
)

0 comments on commit 93def4a

Please sign in to comment.