diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevRoute.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevRoute.kt index e5f0d93a300..83f71516ad5 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevRoute.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevRoute.kt @@ -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 @@ -284,11 +285,11 @@ fun Route.brevRoute( } } - post("opprett-for-omregning") { + post("opprett-brev") { kunSystembruker { systembruker -> withSakId(tilgangssjekker, skrivetilgang = true) { - val req = call.receive() - val brevErDistribuert = service.opprettOgFerdigstillOmregning(systembruker, req) + val req = call.receive() + val brevErDistribuert = service.opprettBrev(systembruker, req) call.respond(brevErDistribuert) } } diff --git a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevService.kt b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevService.kt index 7c65cf92c4b..efe4fbb369c 100644 --- a/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevService.kt +++ b/apps/etterlatte-brev-api/src/main/kotlin/no/nav/etterlatte/brev/BrevService.kt @@ -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 @@ -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( diff --git a/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/klienter/BrevKlient.kt b/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/klienter/BrevKlient.kt index 82afbb0e431..4cf8dbb3f74 100644 --- a/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/klienter/BrevKlient.kt +++ b/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/klienter/BrevKlient.kt @@ -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 @@ -25,17 +27,17 @@ 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() + }.body() } } catch (e: ResponseException) { logger.error("Opprettelse av brev feilet for sak med sakId=$sakid feilet", e) @@ -43,19 +45,19 @@ class BrevKlient( } } - 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() + setBody(request.toJson()) + }.body() } } catch (e: ResponseException) { logger.error("Opprettelse av brev feilet for sak med sakId=$sakid feilet", e) diff --git a/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiver.kt b/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiver.kt index 184b1c9a366..90977382bb9 100644 --- a/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiver.kt +++ b/apps/etterlatte-vedtaksvurdering-kafka/src/main/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiver.kt @@ -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 @@ -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) @@ -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( diff --git a/apps/etterlatte-vedtaksvurdering-kafka/src/test/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiverTest.kt b/apps/etterlatte-vedtaksvurdering-kafka/src/test/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiverTest.kt index 5c535d18a86..40f155a587a 100644 --- a/apps/etterlatte-vedtaksvurdering-kafka/src/test/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiverTest.kt +++ b/apps/etterlatte-vedtaksvurdering-kafka/src/test/kotlin/no/nav/etterlatte/regulering/OpprettVedtakforespoerselRiverTest.kt @@ -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()) } } } diff --git a/libs/etterlatte-brev-model/src/main/kotlin/no/nav/etterlatte/brev/Brev.kt b/libs/etterlatte-brev-model/src/main/kotlin/no/nav/etterlatte/brev/Brev.kt index e5529a70515..97cb246de3f 100644 --- a/libs/etterlatte-brev-model/src/main/kotlin/no/nav/etterlatte/brev/Brev.kt +++ b/libs/etterlatte-brev-model/src/main/kotlin/no/nav/etterlatte/brev/Brev.kt @@ -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( @@ -159,3 +165,8 @@ data class BrevDistribusjonResponse( val brevId: BrevID, val erDistribuert: Boolean, ) + +data class BrevOpprettResponse( + val brevId: BrevID, + val enhetsnummer: Enhetsnummer, +)