Skip to content

Commit

Permalink
EY-4499 Splitt opp opprettelse av brev fra OpprettJournalfoerOgDistri… (
Browse files Browse the repository at this point in the history
#5863)

* EY-4499 Splitt opp opprettelse av brev fra OpprettJournalfoerOgDistribuerRiver
* Så vi unngår unødvendig brevDataMapping

* Fjern validermottaker param

* Minor improv

* Refactor duplicat kode

* Fjerne litt mer unødvendig higher order params i funksjoner som ikke ble brukt ++

* Glemte å oppdatere noen tester

* Får brevtype fra brevkoden

* Fjerne todos

* EY-4499 Fiks varselbrev slik at den bare henter data den trenger
  • Loading branch information
sebassonav authored Sep 27, 2024
1 parent 43c8e16 commit 54eccd5
Show file tree
Hide file tree
Showing 15 changed files with 214 additions and 119 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import java.time.LocalDate
sealed class BrevParametre {
abstract val brevkode: Brevkoder

abstract fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar
abstract fun brevDataMapping(): BrevDataRedigerbar

@JsonTypeName("OMSTILLINGSSTOENAD_AKTIVITETSPLIKT_INFORMASJON_4MND")
data class AktivitetspliktInformasjon4Mnd(
Expand All @@ -30,7 +30,7 @@ sealed class BrevParametre {
val nasjonalEllerUtland: NasjonalEllerUtland,
override val brevkode: Brevkoder = Brevkoder.OMSTILLINGSSTOENAD_AKTIVITETSPLIKT_INFORMASJON_4MND_INNHOLD,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
AktivitetspliktInformasjon4MndBrevdata(aktivitetsgrad, utbetaling, redusertEtterInntekt, nasjonalEllerUtland)
}

Expand All @@ -40,7 +40,7 @@ sealed class BrevParametre {
val nasjonalEllerUtland: NasjonalEllerUtland,
override val brevkode: Brevkoder = Brevkoder.OMSTILLINGSSTOENAD_AKTIVITETSPLIKT_INFORMASJON_6MND_INNHOLD,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
AktivitetspliktInformasjon6MndBrevdata(redusertEtterInntekt, nasjonalEllerUtland)
}

Expand All @@ -50,7 +50,7 @@ sealed class BrevParametre {
val borINorgeEllerIkkeAvtaleland: Boolean,
override val brevkode: Brevkoder = Brevkoder.OMSTILLINGSSTOENAD_INFORMASJON_MOTTATT_SOEKNAD,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
OmstillingsstoenadInformasjonMottattSoeknad(
mottattDato = mottattDato,
borINorgeEllerIkkeAvtaleland = borINorgeEllerIkkeAvtaleland,
Expand All @@ -62,8 +62,7 @@ sealed class BrevParametre {
val borIUtlandet: Boolean,
override val brevkode: Brevkoder = Brevkoder.OMSTILLINGSSTOENAD_INFORMASJON_INNHENTING_AV_OPPLYSNINGER,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
OmstillingsstoenadInnhentingAvOpplysninger(borIUtlandet = borIUtlandet)
override fun brevDataMapping(): BrevDataRedigerbar = OmstillingsstoenadInnhentingAvOpplysninger(borIUtlandet = borIUtlandet)
}

@JsonTypeName("OMSTILLINGSSTOENAD_INFORMASJON_DOEDSFALL_INNHOLD")
Expand All @@ -72,7 +71,7 @@ sealed class BrevParametre {
val avdoedNavn: String,
override val brevkode: Brevkoder = Brevkoder.OMS_INFORMASJON_DOEDSFALL,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
OmstillingsstoenadInformasjonDoedsfall(
avdoedNavn = avdoedNavn,
borIutland = bosattUtland,
Expand All @@ -86,7 +85,7 @@ sealed class BrevParametre {
val erOver18Aar: Boolean,
override val brevkode: Brevkoder = Brevkoder.BP_INFORMASJON_DOEDSFALL,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
BarnepensjonInformasjonDoedsfall(
avdoedNavn = avdoedNavn,
borIutland = bosattUtland,
Expand All @@ -102,7 +101,7 @@ sealed class BrevParametre {
val bosattUtland: Boolean,
override val brevkode: Brevkoder = Brevkoder.BARNEPENSJON_INFORMASJON_MOTTATT_SOEKNAD,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
BarnepensjonInformasjonMottattSoeknad(
mottattDato = mottattDato,
borINorgeEllerIkkeAvtaleland = borINorgeEllerIkkeAvtaleland,
Expand All @@ -117,7 +116,7 @@ sealed class BrevParametre {
val borIUtlandet: Boolean,
override val brevkode: Brevkoder = Brevkoder.BARNEPENSJON_INFORMASJON_INNHENTING_AV_OPPLYSNINGER,
) : BrevParametre() {
override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar =
override fun brevDataMapping(): BrevDataRedigerbar =
BarnepensjonInnhentingAvOpplysninger(
erOver18aar = erOver18aar,
borIUtlandet = borIUtlandet,
Expand All @@ -128,6 +127,6 @@ sealed class BrevParametre {
class TomtBrev : BrevParametre() {
override val brevkode: Brevkoder = Brevkoder.TOMT_INFORMASJONSBREV

override fun brevDataMapping(req: BrevDataRedigerbarRequest): BrevDataRedigerbar = ManueltBrevData()
override fun brevDataMapping(): BrevDataRedigerbar = ManueltBrevData()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ fun Route.brevRoute(
sakId,
brukerTokenInfo,
Brevkoder.TOMT_INFORMASJONSBREV,
) { ManueltBrevData() }
ManueltBrevData(),
)
}.let { (brev, varighet) ->
logger.info("Oppretting av brev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
call.respond(HttpStatusCode.Created, brev)
Expand All @@ -193,7 +194,8 @@ fun Route.brevRoute(
sakId,
brukerTokenInfo,
brevParametre.brevkode,
) { redigerbarTekstRequest -> brevParametre.brevDataMapping(redigerbarTekstRequest) }
brevParametre.brevDataMapping(),
)
}.let { (brev, varighet) ->
logger.info("Oppretting av brev tok ${varighet.toString(DurationUnit.SECONDS, 2)}")
call.respond(HttpStatusCode.Created, brev)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,15 @@ class BrevService(
sakId: SakId,
bruker: BrukerTokenInfo,
brevkode: Brevkoder,
brevDataMapping: suspend (BrevDataRedigerbarRequest) -> BrevDataRedigerbar,
brevData: BrevDataRedigerbar,
): Brev =
brevoppretter
.opprettBrev(
.opprettBrevSomHarInnhold(
sakId = sakId,
behandlingId = null,
bruker = bruker,
brevKodeMapping = { brevkode },
brevtype = brevkode.brevtype,
brevDataMapping = brevDataMapping,
brevKode = brevkode,
brevData = brevData,
).first

data class BrevPayload(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,45 @@ class Brevoppretter(
private val db: BrevRepository,
private val innholdTilRedigerbartBrevHenter: InnholdTilRedigerbartBrevHenter,
) {
suspend fun opprettBrevSomHarInnhold(
sakId: SakId,
behandlingId: UUID?,
bruker: BrukerTokenInfo,
brevKode: Brevkoder,
brevData: BrevDataRedigerbar,
): Pair<Brev, Enhetsnummer> {
with(
innholdTilRedigerbartBrevHenter.hentInnDataForBrevMedData(
sakId,
behandlingId,
bruker,
brevKode,
brevData,
),
) {
val nyttBrev =
OpprettNyttBrev(
sakId = sakId,
behandlingId = behandlingId,
prosessType = BrevProsessType.REDIGERBAR,
soekerFnr = soekerFnr,
mottaker = finnMottaker(sakType, personerISak),
opprettet = Tidspunkt.now(),
innhold = innhold,
innholdVedlegg = innholdVedlegg,
brevtype = brevKode.brevtype,
brevkoder = brevkode,
)

return Pair(db.opprettBrev(nyttBrev), enhet)
}
}

suspend fun opprettBrev(
sakId: SakId,
behandlingId: UUID?,
bruker: BrukerTokenInfo,
brevKodeMapping: (b: BrevkodeRequest) -> Brevkoder,
brevtype: Brevtype,
brevDataMapping: suspend (BrevDataRedigerbarRequest) -> BrevDataRedigerbar,
): Pair<Brev, Enhetsnummer> =
with(
Expand All @@ -53,7 +86,7 @@ class Brevoppretter(
opprettet = Tidspunkt.now(),
innhold = innhold,
innholdVedlegg = innholdVedlegg,
brevtype = brevtype,
brevtype = brevkode.brevtype,
brevkoder = brevkode,
)
return Pair(db.opprettBrev(nyttBrev), enhet)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ package no.nav.etterlatte.brev
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import no.nav.etterlatte.brev.adresse.AdresseService
import no.nav.etterlatte.brev.behandling.GenerellBrevData
import no.nav.etterlatte.brev.behandling.PersonerISak
import no.nav.etterlatte.brev.behandling.erForeldreloes
import no.nav.etterlatte.brev.behandling.loependeIPesys
import no.nav.etterlatte.brev.behandling.opprettAvsenderRequest
import no.nav.etterlatte.brev.brevbaker.BrevbakerRequest
import no.nav.etterlatte.brev.brevbaker.BrevbakerService
import no.nav.etterlatte.brev.hentinformasjon.BrevdataFacade
import no.nav.etterlatte.brev.model.BrevData
import no.nav.etterlatte.brev.model.BrevDataRedigerbar
import no.nav.etterlatte.brev.model.BrevInnhold
import no.nav.etterlatte.brev.model.BrevInnholdVedlegg
Expand All @@ -28,6 +30,18 @@ class InnholdTilRedigerbartBrevHenter(
private val adresseService: AdresseService,
private val redigerbartVedleggHenter: RedigerbartVedleggHenter,
) {
internal suspend fun hentInnDataForBrevMedData(
sakId: SakId,
behandlingId: UUID?,
bruker: BrukerTokenInfo,
brevKode: Brevkoder,
brevData: BrevDataRedigerbar,
): OpprettBrevRequest {
val generellBrevData =
retryOgPakkUt { brevdataFacade.hentGenerellBrevData(sakId, behandlingId, null, bruker) }
return opprettBrevRequest(generellBrevData, brevKode, brevData, bruker)
}

internal suspend fun hentInnData(
sakId: SakId,
behandlingId: UUID?,
Expand All @@ -52,40 +66,48 @@ class InnholdTilRedigerbartBrevHenter(
)

val kode = brevKodeMapping(brevkodeRequest)
return coroutineScope {
val brevDataRedigerbarRequest =
BrevDataRedigerbarRequest(
brukerTokenInfo = bruker,
soekerOgEventuellVerge = generellBrevData.personerISak.soekerOgEventuellVerge(),
sakType = generellBrevData.sak.sakType,
forenkletVedtak = generellBrevData.forenkletVedtak,
utlandstilknytningType = generellBrevData.utlandstilknytning?.type,
revurderingsaarsak = generellBrevData.revurderingsaarsak,
behandlingId = behandlingId,
erForeldreloes = erForeldreloes(generellBrevData.personerISak.soeker, generellBrevData.personerISak.avdoede),
loependeIPesys =
loependeIPesys(
generellBrevData.systemkilde,
generellBrevData.behandlingId,
generellBrevData.revurderingsaarsak,
),
systemkilde = generellBrevData.systemkilde,
avdoede = generellBrevData.personerISak.avdoede,
)
val brevData: BrevDataRedigerbar = brevDataMapping(brevDataRedigerbarRequest)
val brevDataRedigerbarRequest =
BrevDataRedigerbarRequest(
brukerTokenInfo = bruker,
soekerOgEventuellVerge = generellBrevData.personerISak.soekerOgEventuellVerge(),
sakType = generellBrevData.sak.sakType,
forenkletVedtak = generellBrevData.forenkletVedtak,
utlandstilknytningType = generellBrevData.utlandstilknytning?.type,
revurderingsaarsak = generellBrevData.revurderingsaarsak,
behandlingId = behandlingId,
erForeldreloes = erForeldreloes(generellBrevData.personerISak.soeker, generellBrevData.personerISak.avdoede),
loependeIPesys =
loependeIPesys(
generellBrevData.systemkilde,
generellBrevData.behandlingId,
generellBrevData.revurderingsaarsak,
),
systemkilde = generellBrevData.systemkilde,
avdoede = generellBrevData.personerISak.avdoede,
)
val brevData: BrevDataRedigerbar = brevDataMapping(brevDataRedigerbarRequest)
return opprettBrevRequest(generellBrevData, kode, brevData, bruker)
}

private suspend fun opprettBrevRequest(
generellBrevData: GenerellBrevData,
brevKode: Brevkoder,
brevData: BrevData,
bruker: BrukerTokenInfo,
): OpprettBrevRequest =
coroutineScope {
val innhold =
async {
brevbaker.hentRedigerbarTekstFraBrevbakeren(
BrevbakerRequest.fra(
brevKode = kode.redigering,
brevKode = brevKode.redigering,
brevData = brevData,
avsender =
adresseService.hentAvsender(
opprettAvsenderRequest(bruker, generellBrevData.forenkletVedtak, generellBrevData.sak.enhet),
),
soekerOgEventuellVerge = generellBrevData.personerISak.soekerOgEventuellVerge(),
sakId = sakId,
sakId = generellBrevData.sak.id,
spraak = generellBrevData.spraak,
sakType = generellBrevData.sak.sakType,
),
Expand All @@ -96,7 +118,7 @@ class InnholdTilRedigerbartBrevHenter(
async {
redigerbartVedleggHenter.hentInitiellPayloadVedlegg(
bruker,
kode.brevtype,
brevKode.brevtype,
generellBrevData.sak.sakType,
generellBrevData.forenkletVedtak?.type,
generellBrevData.behandlingId,
Expand All @@ -114,12 +136,11 @@ class InnholdTilRedigerbartBrevHenter(
sakType = generellBrevData.sak.sakType,
enhet = generellBrevData.sak.enhet,
personerISak = generellBrevData.personerISak,
innhold = BrevInnhold(kode.tittel, generellBrevData.spraak, innhold.await()),
innhold = BrevInnhold(brevKode.tittel, generellBrevData.spraak, innhold.await()),
innholdVedlegg = innholdVedlegg.await(),
brevkode = kode,
brevkode = brevKode,
)
}
}
}

internal data class OpprettBrevRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import no.nav.etterlatte.libs.common.Enhetsnummer
import no.nav.etterlatte.libs.common.logging.sikkerlogger
import no.nav.etterlatte.libs.common.retryOgPakkUt
import no.nav.etterlatte.libs.common.toJson
import no.nav.etterlatte.libs.common.vedtak.VedtakStatus
import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo
import org.slf4j.LoggerFactory

Expand All @@ -42,7 +41,6 @@ class PDFGenerator(
avsenderRequest: (BrukerTokenInfo, ForenkletVedtak?, Enhetsnummer) -> AvsenderRequest,
brevKodeMapping: (BrevkodeRequest) -> Brevkoder,
brevDataMapping: suspend (BrevDataFerdigstillingRequest) -> BrevDataFerdigstilling,
lagrePdfHvisVedtakFattet: (VedtakStatus?, String?, Brev, Pdf) -> Unit = { _, _, _, _ -> run {} },
): Pdf {
val brev = sjekkOmBrevKanEndres(id)
if (brev.mottaker.erGyldig().isNotEmpty()) {
Expand All @@ -57,7 +55,6 @@ class PDFGenerator(
avsenderRequest,
brevKodeMapping,
brevDataMapping,
lagrePdfHvisVedtakFattet,
)
db.lagrePdfOgFerdigstillBrev(id, pdf)
return pdf
Expand All @@ -69,13 +66,12 @@ class PDFGenerator(
avsenderRequest: (BrukerTokenInfo, ForenkletVedtak?, Enhetsnummer) -> AvsenderRequest,
brevKodeMapping: (BrevkodeRequest) -> Brevkoder,
brevDataMapping: suspend (BrevDataFerdigstillingRequest) -> BrevDataFerdigstilling,
lagrePdfHvisVedtakFattet: (VedtakStatus?, String?, Brev, Pdf) -> Unit = { _, _, _, _ -> run {} },
): Pdf {
val brev = db.hentBrev(id)

if (!brev.kanEndres()) {
logger.info("Brev har status ${brev.status} - returnerer lagret innhold")
return requireNotNull(db.hentPdf(brev.id)) { "Fant ikke brev med id ${brev.id}" }
return requireNotNull(db.hentPdf(brev.id)) { "Fant ikke pdf for brev med id=${brev.id}" }
} else if (brev.prosessType == BrevProsessType.OPPLASTET_PDF) {
logger.info("Brev er en opplastet PDF – returnerer lagret innhold")
return requireNotNull(db.hentPdf(brev.id)) { "Fant ikke pdf for brev med id=${brev.id}" }
Expand Down Expand Up @@ -139,14 +135,6 @@ class PDFGenerator(

return brevbakerService
.genererPdf(brev.id, brevRequest)
.also {
lagrePdfHvisVedtakFattet(
generellBrevData.forenkletVedtak?.status,
generellBrevData.forenkletVedtak?.saksbehandlerIdent,
brev,
it,
)
}
}

private fun hentLagretInnhold(brev: Brev) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import no.nav.etterlatte.libs.common.vedtak.VedtakType
import java.time.LocalDate
import java.time.YearMonth

fun VedtakType?.somTittel() = this?.name?.lowercase()?.replace("_", " ")

data class ForenkletVedtak(
val id: Long,
val status: VedtakStatus,
Expand Down
Loading

0 comments on commit 54eccd5

Please sign in to comment.