Skip to content

Brev flere tiltak #852

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

Merged
merged 10 commits into from
Mar 6, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ internal data class BrevPersonaliaDTO(
val ident: String,
val fornavn: String,
val etternavn: String,
val antallBarn: Int,
)
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ private class BrevRevurderingStansDTO(
val personalia: BrevPersonaliaDTO,
val saksnummer: String,
val datoForUtsending: String,
val tiltaksnavn: String,
val barnetillegg: Boolean = false,
val rammevedtakFraDato: String,
val rammevedtakTilDato: String,
Expand All @@ -36,7 +35,6 @@ internal suspend fun Rammevedtak.toRevurderingStans(
fnr = fnr,
saksbehandlerNavIdent = saksbehandlerNavIdent,
beslutterNavIdent = beslutterNavIdent,
tiltaksnavn = this.behandling.tiltaksnavn,
stansperiode = this.periode,
saksnummer = saksnummer,
// finnes ikke noe forhåndsvisning for Rammevedtak
Expand All @@ -51,7 +49,6 @@ internal suspend fun genererStansbrev(
fnr: Fnr,
saksbehandlerNavIdent: String,
beslutterNavIdent: String?,
tiltaksnavn: String,
stansperiode: Periode,
saksnummer: Saksnummer,
forhåndsvisning: Boolean,
Expand All @@ -65,9 +62,7 @@ internal suspend fun genererStansbrev(
ident = fnr.verdi,
fornavn = brukersNavn.fornavn,
etternavn = brukersNavn.mellomnavnOgEtternavn,
antallBarn = 0,
),
tiltaksnavn = tiltaksnavn,
rammevedtakFraDato = stansperiode.fraOgMed.format(norskDatoFormatter),
rammevedtakTilDato = stansperiode.tilOgMed.format(norskDatoFormatter),
saksnummer = saksnummer.verdi,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import java.time.LocalDate
@Suppress("unused")
private data class BrevFørstegangsvedtakInnvilgelseDTO(
val personalia: BrevPersonaliaDTO,
val tiltaksnavn: String,
val rammevedtakFraDato: String,
val rammevedtakTilDato: String,
val saksnummer: String,
Expand Down Expand Up @@ -54,7 +53,6 @@ internal suspend fun Rammevedtak.toInnvilgetSøknadsbrev(
fnr = fnr,
saksbehandlerNavIdent = saksbehandlerNavIdent,
beslutterNavIdent = beslutterNavIdent,
tiltaksnavn = this.behandling.tiltaksnavn,
innvilgelsesperiode = this.periode,
saksnummer = saksnummer,
// finnes ikke noe forhåndsvisning for rammevedtak
Expand All @@ -71,7 +69,6 @@ internal suspend fun genererInnvilgetSøknadsbrev(
fnr: Fnr,
saksbehandlerNavIdent: String,
beslutterNavIdent: String?,
tiltaksnavn: String,
innvilgelsesperiode: Periode,
saksnummer: Saksnummer,
forhåndsvisning: Boolean,
Expand All @@ -86,9 +83,7 @@ internal suspend fun genererInnvilgetSøknadsbrev(
ident = fnr.verdi,
fornavn = brukersNavn.fornavn,
etternavn = brukersNavn.mellomnavnOgEtternavn,
antallBarn = 0,
),
tiltaksnavn = tiltaksnavn,
rammevedtakFraDato = innvilgelsesperiode.fraOgMed.format(norskDatoFormatter),
rammevedtakTilDato = innvilgelsesperiode.tilOgMed.format(norskDatoFormatter),
saksnummer = saksnummer.verdi,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import no.nav.tiltakspenger.meldekort.ports.GenererUtbetalingsvedtakGateway
import no.nav.tiltakspenger.saksbehandling.domene.behandling.FritekstTilVedtaksbrev
import no.nav.tiltakspenger.saksbehandling.domene.personopplysninger.Navn
import no.nav.tiltakspenger.saksbehandling.domene.sak.Saksnummer
import no.nav.tiltakspenger.saksbehandling.domene.tiltak.Tiltaksdeltagelse
import no.nav.tiltakspenger.saksbehandling.domene.vedtak.Rammevedtak
import no.nav.tiltakspenger.saksbehandling.ports.GenererInnvilgelsesvedtaksbrevGateway
import no.nav.tiltakspenger.saksbehandling.ports.GenererStansvedtaksbrevGateway
Expand Down Expand Up @@ -102,7 +103,6 @@ internal class PdfgenHttpClient(
fnr: Fnr,
saksbehandlerNavIdent: String,
beslutterNavIdent: String?,
tiltaksnavn: String,
innvilgelsesperiode: Periode,
saksnummer: Saksnummer,
sakId: SakId,
Expand All @@ -119,7 +119,6 @@ internal class PdfgenHttpClient(
fnr = fnr,
saksbehandlerNavIdent = saksbehandlerNavIdent,
beslutterNavIdent = beslutterNavIdent,
tiltaksnavn = tiltaksnavn,
innvilgelsesperiode = innvilgelsesperiode,
saksnummer = saksnummer,
forhåndsvisning = forhåndsvisning,
Expand All @@ -133,20 +132,14 @@ internal class PdfgenHttpClient(

override suspend fun genererUtbetalingsvedtak(
utbetalingsvedtak: Utbetalingsvedtak,
tiltakstype: String,
tiltaksnavn: String,
eksternGjennomføringId: String?,
eksternDeltagelseId: String,
tiltaksdeltagelser: List<Tiltaksdeltagelse>,
hentSaksbehandlersNavn: suspend (String) -> String,
): Either<KunneIkkeGenererePdf, PdfOgJson> {
return pdfgenRequest(
jsonPayload = {
utbetalingsvedtak.toJsonRequest(
hentSaksbehandlersNavn,
tiltakstype,
tiltaksnavn,
eksternGjennomføringId,
eksternDeltagelseId,
tiltaksdeltagelser,
)
},
errorContext = "SakId: ${utbetalingsvedtak.sakId}, saksnummer: ${utbetalingsvedtak.saksnummer}, vedtakId: ${utbetalingsvedtak.id}",
Expand Down Expand Up @@ -174,7 +167,6 @@ internal class PdfgenHttpClient(
fnr: Fnr,
saksbehandlerNavIdent: String,
beslutterNavIdent: String?,
tiltaksnavn: String,
stansperiode: Periode,
saksnummer: Saksnummer,
sakId: SakId,
Expand All @@ -189,7 +181,6 @@ internal class PdfgenHttpClient(
fnr = fnr,
saksbehandlerNavIdent = saksbehandlerNavIdent,
beslutterNavIdent = beslutterNavIdent,
tiltaksnavn = tiltaksnavn,
stansperiode = stansperiode,
saksnummer = saksnummer,
forhåndsvisning = forhåndsvisning,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude
import no.nav.tiltakspenger.libs.json.serialize
import no.nav.tiltakspenger.meldekort.domene.MeldeperiodeBeregningDag
import no.nav.tiltakspenger.meldekort.domene.ReduksjonAvYtelsePåGrunnAvFravær
import no.nav.tiltakspenger.saksbehandling.domene.tiltak.Tiltaksdeltagelse
import no.nav.tiltakspenger.utbetaling.domene.Utbetalingsvedtak
import no.nav.tiltakspenger.vedtak.clients.pdfgen.formattering.norskDatoFormatter
import no.nav.tiltakspenger.vedtak.clients.pdfgen.formattering.norskTidspunktFormatter
Expand All @@ -15,10 +16,7 @@ private data class UtbetalingsvedtakDTO(
val saksbehandler: SaksbehandlerDTO,
val beslutter: SaksbehandlerDTO,
val meldekortDager: List<MeldekortDagDTO>,
val tiltakstype: String,
val eksternDeltagelseId: String,
val eksternGjennomføringId: String?,
val tiltaksnavn: String,
val tiltak: List<TiltakDTO>,
val iverksattTidspunkt: String,
val fødselsnummer: String,
) {
Expand All @@ -28,7 +26,6 @@ private data class UtbetalingsvedtakDTO(

data class SaksbehandlerDTO(
val navn: String,
val navIdent: String,
)

data class PeriodeDTO(
Expand All @@ -38,21 +35,24 @@ private data class UtbetalingsvedtakDTO(

data class MeldekortDagDTO(
val dato: String,
val tiltakType: String,
val status: String,
val beløp: Int,
val beløpBarnetillegg: Int,
val prosent: Int,
val reduksjon: String?,
)

data class TiltakDTO(
val tiltakstypenavn: String,
val tiltakstype: String,
val eksternDeltagelseId: String,
val eksternGjennomføringId: String?,
)
}

suspend fun Utbetalingsvedtak.toJsonRequest(
hentSaksbehandlersNavn: suspend (String) -> String,
tiltakstype: String,
tiltaksnavn: String,
eksternGjennomføringId: String?,
eksternDeltagelseId: String,
tiltaksdeltagelser: List<Tiltaksdeltagelse>,
): String {
return UtbetalingsvedtakDTO(
fødselsnummer = fnr.verdi,
Expand All @@ -67,24 +67,28 @@ suspend fun Utbetalingsvedtak.toJsonRequest(
meldekortDager = meldekortbehandling.beregning.dager.map { dag ->
UtbetalingsvedtakDTO.MeldekortDagDTO(
dato = dag.dato.format(norskDatoFormatter),
tiltakType = dag.tiltakstype.toString(),
status = dag.toStatus(),
beløp = dag.beløp,
beløpBarnetillegg = dag.beløpBarnetillegg,
prosent = dag.prosent,
reduksjon = dag.toReduksjon(),
)
},
eksternGjennomføringId = eksternGjennomføringId,
tiltakstype = tiltakstype,
tiltaksnavn = tiltaksnavn,
eksternDeltagelseId = eksternDeltagelseId,
tiltak = tiltaksdeltagelser.map { it.toTiltakDTO() },
iverksattTidspunkt = opprettet.format(norskTidspunktFormatter),
).let { serialize(it) }
}

private fun Tiltaksdeltagelse.toTiltakDTO() =
UtbetalingsvedtakDTO.TiltakDTO(
tiltakstypenavn = typeNavn,
tiltakstype = typeKode.name,
eksternDeltagelseId = eksternDeltagelseId,
eksternGjennomføringId = gjennomføringId,
)

private suspend fun tilSaksbehadlerDto(navIdent: String, hentSaksbehandlersNavn: suspend (String) -> String): UtbetalingsvedtakDTO.SaksbehandlerDTO {
return UtbetalingsvedtakDTO.SaksbehandlerDTO(navn = hentSaksbehandlersNavn(navIdent), navIdent = navIdent)
return UtbetalingsvedtakDTO.SaksbehandlerDTO(navn = hentSaksbehandlersNavn(navIdent))
}

private fun MeldeperiodeBeregningDag.toStatus(): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import no.nav.tiltakspenger.libs.periodisering.PeriodeDTO
import no.nav.tiltakspenger.libs.periodisering.toDTO
import no.nav.tiltakspenger.saksbehandling.domene.sak.Sak

// TODO: fjerne tiltaksnavn fra responsen, eller la det være en liste
data class MeldeperiodeKjedeDTO(
val kjedeId: String,
val periode: PeriodeDTO,
Expand All @@ -18,7 +19,7 @@ fun Sak.toMeldeperiodeKjedeDTO(meldeperiodeKjedeId: MeldeperiodeKjedeId): Meldep
return MeldeperiodeKjedeDTO(
kjedeId = meldeperiodeKjede.kjedeId.toString(),
periode = meldeperiodeKjede.periode.toDTO(),
tiltaksnavn = this.hentTiltaksnavn(),
tiltaksnavn = this.vedtaksliste.valgteTiltaksdeltakelserForPeriode(meldeperiodeKjede.periode).map { it.typeNavn }.joinToString { it.verdi },
meldeperioder = meldeperiodeKjede.map { toMeldeperiodeDTO(it) },
)
}
Expand All @@ -28,7 +29,7 @@ fun Sak.toMeldeperiodeKjederDTO(): List<MeldeperiodeKjedeDTO> {
MeldeperiodeKjedeDTO(
kjedeId = meldeperiodeKjede.kjedeId.toString(),
periode = meldeperiodeKjede.periode.toDTO(),
tiltaksnavn = this.hentTiltaksnavn(),
tiltaksnavn = this.vedtaksliste.valgteTiltaksdeltakelserForPeriode(meldeperiodeKjede.periode).map { it.typeNavn }.joinToString { it.verdi },
meldeperioder = meldeperiodeKjede.map { toMeldeperiodeDTO(it) },
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ class PdfgenHttpClientTest {
val utbetalingsvedtak = ObjectMother.utbetalingsvedtak()
PdfgenHttpClient("unused").genererUtbetalingsvedtak(
utbetalingsvedtak,
tiltakstype = "tiltakstype",
tiltaksnavn = "tiltaksnavn",
eksternDeltagelseId = "213-1232-2133-123",
eksternGjennomføringId = null,
tiltaksdeltagelser = listOf(ObjectMother.tiltaksdeltagelse()),
) { ObjectMother.saksbehandler().brukernavn }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ package no.nav.tiltakspenger.meldekort.ports
import arrow.core.Either
import no.nav.tiltakspenger.felles.KunneIkkeGenererePdf
import no.nav.tiltakspenger.felles.journalføring.PdfOgJson
import no.nav.tiltakspenger.saksbehandling.domene.tiltak.Tiltaksdeltagelse
import no.nav.tiltakspenger.utbetaling.domene.Utbetalingsvedtak

interface GenererUtbetalingsvedtakGateway {
suspend fun genererUtbetalingsvedtak(
utbetalingsvedtak: Utbetalingsvedtak,
tiltakstype: String,
tiltaksnavn: String,
eksternGjennomføringId: String?,
eksternDeltagelseId: String,
tiltaksdeltagelser: List<Tiltaksdeltagelse>,
hentSaksbehandlersNavn: suspend (String) -> String,
): Either<KunneIkkeGenererePdf, PdfOgJson>
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import no.nav.tiltakspenger.libs.common.SakId
import no.nav.tiltakspenger.libs.common.Saksbehandler
import no.nav.tiltakspenger.libs.periodisering.Periode
import no.nav.tiltakspenger.libs.periodisering.Periodisering
import no.nav.tiltakspenger.libs.tiltak.TiltakstypeSomGirRett
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Behandlingsstatus.AVBRUTT
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Behandlingsstatus.KLAR_TIL_BEHANDLING
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Behandlingsstatus.KLAR_TIL_BESLUTNING
Expand Down Expand Up @@ -74,12 +73,8 @@ data class Behandling(
/** John og Agnethe har kommet fram til at vi setter denne til 14 dager for meldeperiode i førsteomgang. Hvis det fører til mye feilutbetaling eller lignende må vi la saksbehandler periodisere dette selv, litt på samme måte som barnetillegg. */
val maksDagerMedTiltakspengerForPeriode: Int = 14

// TODO: Når saksbehandler kan velge hvilken deltakelse som gjelder på hvilke dager må vi bruke det som er valgt, ikke bare den første
// TODO: Brukes bare for å angi deltakelse frem til saksbehandler setter den selv via input. Skal fjernes når det er på plass.
private val tiltaksdeltakelse = saksopplysninger.tiltaksdeltagelse.first()
val tiltaksnavn = tiltaksdeltakelse.typeNavn
val tiltakstype: TiltakstypeSomGirRett = tiltaksdeltakelse.typeKode
val tiltaksid: String = tiltaksdeltakelse.eksternDeltagelseId
val gjennomføringId: String? = tiltaksdeltakelse.gjennomføringId

fun inneholderEksternDeltagelseId(eksternDeltagelseId: String): Boolean =
saksopplysninger.tiltaksdeltagelse.find { it.eksternDeltagelseId == eksternDeltagelseId } != null
Expand Down Expand Up @@ -450,6 +445,9 @@ data class Behandling(
val barnetilleggsperiode = barnetillegg.periodisering.totalePeriode
require(barnetilleggsperiode == virkningsperiode) { "Barnetilleggsperioden ($barnetilleggsperiode) må ha samme periode som virkningsperioden($virkningsperiode)" }
}
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
}
}

UNDER_BESLUTNING -> {
Expand All @@ -462,6 +460,9 @@ data class Behandling(
val barnetilleggsperiode = barnetillegg.periodisering.totalePeriode
require(barnetilleggsperiode == virkningsperiode) { "Barnetilleggsperioden ($barnetilleggsperiode) må ha samme periode som virkningsperioden($virkningsperiode)" }
}
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
}
}

VEDTATT -> {
Expand All @@ -475,6 +476,9 @@ data class Behandling(
val barnetilleggsperiode = barnetillegg.periodisering.totalePeriode
require(barnetilleggsperiode == virkningsperiode) { "Barnetilleggsperioden ($barnetilleggsperiode) må ha samme periode som virkningsperioden($virkningsperiode)" }
}
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
}
}

AVBRUTT -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import no.nav.tiltakspenger.meldekort.domene.MeldeperiodeKjeder
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Behandling
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Behandlinger
import no.nav.tiltakspenger.saksbehandling.domene.behandling.Søknad
import no.nav.tiltakspenger.saksbehandling.domene.tiltak.Tiltaksdeltagelse
import no.nav.tiltakspenger.saksbehandling.domene.vedtak.Vedtaksliste
import no.nav.tiltakspenger.saksbehandling.service.avslutt.AvbrytSøknadOgBehandlingCommand
import no.nav.tiltakspenger.utbetaling.domene.Utbetalinger
Expand Down Expand Up @@ -66,8 +65,6 @@ data class Sak(

val barnetilleggsperioder: Periodisering<AntallBarn> by lazy { vedtaksliste.barnetilleggsperioder }

val tiltaksdeltagelseperioder: Periodisering<Tiltaksdeltagelse> by lazy { vedtaksliste.tiltaksdeltagelseperioder }

val tiltakstypeperioder: Periodisering<TiltakstypeSomGirRett> by lazy { vedtaksliste.tiltakstypeperioder }

fun antallBarnForDag(dag: LocalDate): AntallBarn {
Expand Down Expand Up @@ -103,9 +100,6 @@ data class Sak(
fun hentAntallDager(): Int? = vedtaksliste.førstegangsvedtak?.behandling?.maksDagerMedTiltakspengerForPeriode
fun hentTynnSak(): TynnSak = TynnSak(this.id, this.fnr, this.saksnummer)

/** Den er kun trygg inntil vi støtter mer enn ett tiltak på én sak. */
fun hentTiltaksnavn(): String? = vedtaksliste.førstegangsvedtak?.behandling?.tiltaksnavn

fun hentBehandling(behandlingId: BehandlingId): Behandling? = behandlinger.hentBehandling(behandlingId)

fun sisteUtbetalteMeldekortDag(): LocalDate? = meldekortBehandlinger.sisteUtbetalteMeldekortDag
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data class ValgteTiltaksdeltakelser(
val periodisering: Periodisering<Tiltaksdeltagelse>,
) {
companion object {
// TODO: Sett inn det saksbehandler faktisk valgte og sjekk at det ikke er huller eller overlapp
// TODO: Sett inn det saksbehandler faktisk valgte
fun periodiser(
tiltaksdeltagelse: Tiltaksdeltagelse,
periode: Periode,
Expand Down

This file was deleted.

Loading
Loading