Skip to content

Commit 07f7ca2

Browse files
authored
NAV-24387: Forvalter-endepunkt for å kunne korrigere andeler i fagsaker med avvik. (#5168)
[NAV-24387](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-24387) ### 💰 Hva skal gjøres, og hvorfor? Etter en forholdsvis vellykket konsistensavstemming, hvor vi benyttet `UtbetalingsTidslinjeService` for å finne periodene vi skulle sende til Oppdrag, ble det besluttet at vi skulle forsøke å bruke `UtbetalingsTidslinjeService` til å finne og korrigere andeler med avvik. Legger her til et forvalter-endepunkt som lar oss sende inn en liste over fagsakId'er vi vet at har avvik, for å korrigere tilhørende andeler i siste iverksatte behandling med feil periodeId, forrigePeriodeId eller kildeBehandlingId. For å sikre at endepunktet ikke kjøres ved et uhell er det lagt på en toggle som må være på for at endepunktet skal gjøre noe i tillegg til en `dryRun` parameter i request-objektet som default er satt til `true`, slik at vi kan se hva resultatet av en kjøring vil bli før noe blir persistert til db. For alle andeler som korrigeres, lagrer vi "originalen" i en ny tabell "PatchetAndelTilkjentYtelse" i tilfelle vi skulle ønske å finne ut hvordan en bestemt andel så ut tidligere. Denne tabellen er tenkt at skal slettes etterhvert. Litt avhengig av hvordan patchingen går og om vi ser at vi vil ha behov for å benytte endepunktet flere ganger i fremtiden. ### 🔎️ Er det noe spesielt du ønsker tilbakemelding om? ### ✅ Checklist - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [x] Jeg har config- eller sql-endringer. - [x] Jeg har skrevet tester.
1 parent 4a620c7 commit 07f7ca2

File tree

13 files changed

+1246
-424
lines changed

13 files changed

+1246
-424
lines changed

Diff for: src/main/kotlin/no/nav/familie/ba/sak/config/featureToggle/FeatureToggle.kt

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ enum class FeatureToggle(
2828

2929
// NAV-24387
3030
BRUK_UTBETALINGSTIDSLINJER_VED_GENERERING_AV_PERIODER_TIL_AVSTEMMING("familie-ba-sak.bruk-utbetalingstidslinjer-ved-generering-av-perioder-til-avstemming"),
31+
SKAL_FINNE_OG_PATCHE_ANDELER_I_FAGAKER_MED_AVVIK("familie-ba-sak.skal-finne-og-patche-andeler-i-fagsaker-med-avvik"),
3132

3233
// satsendring
3334
// Oppretter satsendring-tasker for de som ikke har fått ny task

Diff for: src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/økonomi/utbetalingsoppdrag/OppdaterTilkjentYtelseService.kt

+23
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package no.nav.familie.ba.sak.integrasjoner.økonomi.utbetalingsoppdrag
22

33
import no.nav.familie.ba.sak.common.ClockProvider
4+
import no.nav.familie.ba.sak.common.Feil
45
import no.nav.familie.ba.sak.common.secureLogger
56
import no.nav.familie.ba.sak.common.toYearMonth
7+
import no.nav.familie.ba.sak.internal.AndelTilkjentYtelseKorreksjon
68
import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelse
9+
import no.nav.familie.ba.sak.kjerne.beregning.domene.PatchetAndelTilkjentYtelseRepository
710
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelse
811
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelseRepository
912
import no.nav.familie.ba.sak.kjerne.beregning.domene.tilAndelerTilkjentYtelseMedEndreteUtbetalinger
13+
import no.nav.familie.ba.sak.kjerne.beregning.domene.tilPatchetAndelTilkjentYtelse
1014
import no.nav.familie.ba.sak.kjerne.endretutbetaling.EndretUtbetalingAndelHentOgPersisterService
1115
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.EndretUtbetalingAndel
1216
import no.nav.familie.ba.sak.kjerne.endretutbetaling.domene.førerTilOpphør
@@ -15,13 +19,15 @@ import no.nav.familie.felles.utbetalingsgenerator.domain.BeregnetUtbetalingsoppd
1519
import no.nav.familie.felles.utbetalingsgenerator.domain.Utbetalingsoppdrag
1620
import no.nav.familie.kontrakter.felles.objectMapper
1721
import org.springframework.stereotype.Service
22+
import org.springframework.transaction.annotation.Transactional
1823
import java.time.LocalDate
1924
import java.time.YearMonth
2025

2126
@Service
2227
class OppdaterTilkjentYtelseService(
2328
private val endretUtbetalingAndelHentOgPersisterService: EndretUtbetalingAndelHentOgPersisterService,
2429
private val tilkjentYtelseRepository: TilkjentYtelseRepository,
30+
private val patchetAndelTilkjentYtelseRepository: PatchetAndelTilkjentYtelseRepository,
2531
private val clockProvider: ClockProvider,
2632
) {
2733
fun oppdaterTilkjentYtelseMedUtbetalingsoppdrag(
@@ -46,6 +52,23 @@ class OppdaterTilkjentYtelseService(
4652
tilkjentYtelseRepository.save(tilkjentYtelse)
4753
}
4854

55+
@Transactional
56+
fun oppdaterTilkjentYtelseMedKorrigerteAndeler(
57+
tilkjentYtelse: TilkjentYtelse,
58+
andelTilkjentYtelseKorreksjoner: List<AndelTilkjentYtelseKorreksjon>,
59+
) {
60+
val andelerSomSkalSlettes = andelTilkjentYtelseKorreksjoner.map { it.andelMedFeil }
61+
val andelerSomSkalOpprettes = andelTilkjentYtelseKorreksjoner.map { it.korrigertAndel }
62+
63+
val andelerSomSkalSlettesGruppertPåId = andelerSomSkalSlettes.groupBy { it.id }
64+
if (andelerSomSkalSlettesGruppertPåId.any { it.value.size > 1 }) throw Feil("Den samme andelen forekommer flere ganger blant andelene som er markert for sletting. Dette betyr at det finnes en splitt i utbetalingsoppdragene oversendt til Oppdrag som ikke eksisterer i andelene.")
65+
66+
patchetAndelTilkjentYtelseRepository.saveAll(andelerSomSkalSlettes.map { it.tilPatchetAndelTilkjentYtelse() })
67+
68+
tilkjentYtelse.andelerTilkjentYtelse.removeAll(andelerSomSkalSlettes.toSet())
69+
tilkjentYtelse.andelerTilkjentYtelse.addAll(andelerSomSkalOpprettes.toSet())
70+
}
71+
4972
private fun oppdaterTilkjentYtelseMedUtbetalingsoppdrag(
5073
tilkjentYtelse: TilkjentYtelse,
5174
utbetalingsoppdrag: Utbetalingsoppdrag,

Diff for: src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterController.kt

+34
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse
55
import io.swagger.v3.oas.annotations.responses.ApiResponses
66
import jakarta.validation.Valid
77
import no.nav.familie.ba.sak.common.Feil
8+
import no.nav.familie.ba.sak.common.FunksjonellFeil
89
import no.nav.familie.ba.sak.common.secureLogger
910
import no.nav.familie.ba.sak.config.AuditLoggerEvent
1011
import no.nav.familie.ba.sak.config.BehandlerRolle
@@ -509,4 +510,37 @@ class ForvalterController(
509510

510511
return ResponseEntity.ok(utbetalingsTidslinjeService.genererUtbetalingstidslinjerForFagsak(fagsakId).map { it.tilUtbetalingsperioder() })
511512
}
513+
514+
@PostMapping("/finn-og-patch-andeler-tilkjent-ytelse-i-fagsaker-med-avvik")
515+
@Operation(
516+
summary = "Finner og patcher andeler tilkjent ytelse i fagsaker med avvik i konsistensavstemming",
517+
description =
518+
"Bruker Utbetalingtidslinjer til å sammenligne andelerTilkjentYtelse med faktiske utbetalingsperioder oversendt til Oppdrag." +
519+
"Finner vi forskjeller mellom en andel og en utbetalingsperiode slettes den originale andelen og erstattes av en korrigert andel.",
520+
)
521+
fun finnOgPatchAndelerTilkjentYtelseIFagsakerMedAvvik(
522+
@RequestBody finnOgPatchAndelerRequestDto: FinnOgPatchAndelerRequestDto,
523+
): ResponseEntity<List<Pair<Long, List<AndelTilkjentYtelseKorreksjonDto>?>>> {
524+
tilgangService.verifiserHarTilgangTilHandling(
525+
minimumBehandlerRolle = BehandlerRolle.FORVALTER,
526+
handling = "Finne og patche andeler tilkjent ytelse i fagsaker med avvik i konsistensavstemming",
527+
)
528+
if (!unleashNextMedContextService.isEnabled(FeatureToggle.SKAL_FINNE_OG_PATCHE_ANDELER_I_FAGAKER_MED_AVVIK, false)) {
529+
throw FunksjonellFeil("Kan ikke finne og patche andeler. Toggelen ${FeatureToggle.SKAL_FINNE_OG_PATCHE_ANDELER_I_FAGAKER_MED_AVVIK} er skrudd av")
530+
}
531+
532+
return ResponseEntity.ok(
533+
forvalterService.finnOgPatchAndelerTilkjentYtelseIFagsakerMedAvvik(
534+
fagsaker = finnOgPatchAndelerRequestDto.fagsaker,
535+
korrigerAndelerFraOgMedDato = finnOgPatchAndelerRequestDto.korrigerAndelerFraOgMedDato,
536+
dryRun = finnOgPatchAndelerRequestDto.dryRun,
537+
),
538+
)
539+
}
512540
}
541+
542+
data class FinnOgPatchAndelerRequestDto(
543+
val fagsaker: Set<Long>,
544+
val korrigerAndelerFraOgMedDato: LocalDate = LocalDate.of(2025, 2, 1),
545+
val dryRun: Boolean = true,
546+
)

Diff for: src/main/kotlin/no/nav/familie/ba/sak/internal/ForvalterService.kt

+126
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,47 @@ import kotlinx.coroutines.awaitAll
1010
import kotlinx.coroutines.runBlocking
1111
import no.nav.familie.ba.sak.common.Feil
1212
import no.nav.familie.ba.sak.common.UtbetalingsikkerhetFeil
13+
import no.nav.familie.ba.sak.common.førsteDagIInneværendeMåned
1314
import no.nav.familie.ba.sak.common.secureLogger
15+
import no.nav.familie.ba.sak.common.sisteDagIInneværendeMåned
1416
import no.nav.familie.ba.sak.common.toYearMonth
17+
import no.nav.familie.ba.sak.integrasjoner.økonomi.UtbetalingsTidslinjeService
18+
import no.nav.familie.ba.sak.integrasjoner.økonomi.Utbetalingstidslinje
19+
import no.nav.familie.ba.sak.integrasjoner.økonomi.utbetalingsoppdrag.OppdaterTilkjentYtelseService
1520
import no.nav.familie.ba.sak.integrasjoner.økonomi.ØkonomiService
1621
import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.ArbeidsfordelingService
1722
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService
1823
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingRepository
1924
import no.nav.familie.ba.sak.kjerne.beregning.BeregningService
2025
import no.nav.familie.ba.sak.kjerne.beregning.TilkjentYtelseValideringService
26+
import no.nav.familie.ba.sak.kjerne.beregning.domene.AndelTilkjentYtelse
27+
import no.nav.familie.ba.sak.kjerne.beregning.domene.TilkjentYtelseRepository
28+
import no.nav.familie.ba.sak.kjerne.beregning.domene.YtelseType
2129
import no.nav.familie.ba.sak.kjerne.fagsak.FagsakRepository
2230
import no.nav.familie.ba.sak.kjerne.grunnlag.personopplysninger.PersongrunnlagService
31+
import no.nav.familie.ba.sak.kjerne.personident.Aktør
32+
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.beskjærFraOgMed
2333
import no.nav.familie.ba.sak.kjerne.vedtak.VedtakService
2434
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.VilkårsvurderingService
2535
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.PersonResultat
2636
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkår
2737
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkår.UNDER_18_ÅR
2838
import no.nav.familie.ba.sak.kjerne.vilkårsvurdering.domene.Vilkårsvurdering
2939
import no.nav.familie.log.mdc.MDCConstants
40+
import no.nav.familie.tidslinje.Periode
41+
import no.nav.familie.tidslinje.Tidslinje
42+
import no.nav.familie.tidslinje.tilTidslinje
43+
import no.nav.familie.tidslinje.utvidelser.filtrerIkkeNull
44+
import no.nav.familie.tidslinje.utvidelser.kombinerMed
45+
import no.nav.familie.tidslinje.utvidelser.tilPerioderIkkeNull
46+
import no.nav.familie.tidslinje.verdier
3047
import org.slf4j.LoggerFactory
3148
import org.slf4j.MDC
3249
import org.springframework.data.domain.PageRequest
3350
import org.springframework.stereotype.Service
3451
import org.springframework.transaction.annotation.Transactional
3552
import java.time.LocalDate
53+
import java.time.YearMonth
3654

3755
@Service
3856
class ForvalterService(
@@ -46,6 +64,9 @@ class ForvalterService(
4664
private val arbeidsfordelingService: ArbeidsfordelingService,
4765
private val vilkårsvurderingService: VilkårsvurderingService,
4866
private val persongrunnlagService: PersongrunnlagService,
67+
private val utbetalingsTidslinjeService: UtbetalingsTidslinjeService,
68+
private val tilkjentYtelseRepository: TilkjentYtelseRepository,
69+
private val oppdaterTilkjentYtelseService: OppdaterTilkjentYtelseService,
4970
) {
5071
private val logger = LoggerFactory.getLogger(ForvalterService::class.java)
5172

@@ -210,9 +231,114 @@ class ForvalterService(
210231
throw Feil("Det finnes flere vilkårresultater som begynner før fødselsdato til person: $this")
211232
}
212233
}
234+
235+
@Transactional
236+
fun finnOgPatchAndelerTilkjentYtelseIFagsakerMedAvvik(
237+
fagsaker: Set<Long>,
238+
korrigerAndelerFraOgMedDato: LocalDate,
239+
dryRun: Boolean = true,
240+
): List<Pair<Long, List<AndelTilkjentYtelseKorreksjonDto>?>> {
241+
return fagsaker.map { fagsakId ->
242+
val sisteIverksatteBehandling = behandlingHentOgPersisterService.hentSisteBehandlingSomErIverksatt(fagsakId = fagsakId)
243+
if (sisteIverksatteBehandling != null) {
244+
val tilkjentYtelse = tilkjentYtelseRepository.findByBehandling(behandlingId = sisteIverksatteBehandling.id)
245+
val andelerTilkjentYtelse = tilkjentYtelse.andelerTilkjentYtelse.groupBy { Pair(it.aktør, it.type) }
246+
val utbetalingstidslinjer = utbetalingsTidslinjeService.genererUtbetalingstidslinjerForFagsak(fagsakId = fagsakId)
247+
val andelTilkjentYtelseKorreksjoner: List<AndelTilkjentYtelseKorreksjon> =
248+
utbetalingstidslinjer.flatMap { utbetalingstidslinje ->
249+
val andeltidslinjeForUtbetalingstidslinje = finnAndelerTilkjentYtelseForUtbetalingstidslinje(utbetalingstidslinje = utbetalingstidslinje, andelerTilkjentYtelsePerAktørOgType = andelerTilkjentYtelse)
250+
utbetalingstidslinje.tidslinje
251+
// Ser kun på andeler som løper fra og med korrigerAndelerFraOgMedDato. Tanken er at vi ikke ønsker å korrigere bakover i tid.
252+
.beskjærFraOgMed(korrigerAndelerFraOgMedDato)
253+
.kombinerMed(andeltidslinjeForUtbetalingstidslinje) { utbetalingsperiode, andelTilkjentYtelse ->
254+
// Dersom verken utbetalingsperiode eller andelTilkjentYtelse er null betyr det at de overlapper.
255+
// Dersom de har ulike verdier for enten periodeId, forrigePeriodeId eller kildeBehandlingId oppretter vi en AndelTilkjentYtelseKorreksjon
256+
// Korreksjonen inneholder andelen med feil samt en korrigert versjon av andelen.
257+
if (utbetalingsperiode != null && andelTilkjentYtelse != null) {
258+
if (utbetalingsperiode.periodeId != andelTilkjentYtelse.periodeOffset || utbetalingsperiode.forrigePeriodeId != andelTilkjentYtelse.forrigePeriodeOffset || utbetalingsperiode.behandlingId != andelTilkjentYtelse.kildeBehandlingId) {
259+
return@kombinerMed AndelTilkjentYtelseKorreksjon(andelTilkjentYtelse, andelTilkjentYtelse.copy(id = 0, periodeOffset = utbetalingsperiode.periodeId, forrigePeriodeOffset = utbetalingsperiode.forrigePeriodeId, kildeBehandlingId = utbetalingsperiode.behandlingId))
260+
}
261+
}
262+
return@kombinerMed null
263+
}.filtrerIkkeNull()
264+
.tilPerioderIkkeNull()
265+
.verdier()
266+
}
267+
268+
if (!dryRun) {
269+
// Sletter andeler med feil og oppretter korrigerte andeler.
270+
// Slettede andeler lagres i ny tabell PatchetAndelTilkjentYtelse slik at vi har mulighet til å finne ut hvordan de så ut før endringen.
271+
oppdaterTilkjentYtelseService.oppdaterTilkjentYtelseMedKorrigerteAndeler(
272+
tilkjentYtelse = tilkjentYtelse,
273+
andelTilkjentYtelseKorreksjoner = andelTilkjentYtelseKorreksjoner,
274+
)
275+
}
276+
return@map Pair(fagsakId, andelTilkjentYtelseKorreksjoner.tilAndelerTilkjentYtelseKorreksjonerDto())
277+
}
278+
return@map Pair(fagsakId, null)
279+
}
280+
}
281+
282+
private fun finnAndelerTilkjentYtelseForUtbetalingstidslinje(
283+
utbetalingstidslinje: Utbetalingstidslinje,
284+
andelerTilkjentYtelsePerAktørOgType: Map<Pair<Aktør, YtelseType>, List<AndelTilkjentYtelse>>,
285+
): Tidslinje<AndelTilkjentYtelse> =
286+
andelerTilkjentYtelsePerAktørOgType.entries
287+
.single { (_, andeler) ->
288+
289+
val førsteOffset =
290+
andeler
291+
.firstOrNull { it.erAndelSomSkalSendesTilOppdrag() && it.periodeOffset != null }
292+
?.periodeOffset
293+
if (førsteOffset != null) {
294+
return@single utbetalingstidslinje.erTidslinjeForPeriodeId(førsteOffset)
295+
}
296+
return@single false
297+
}.value
298+
.map { Periode(verdi = it, fom = it.stønadFom.førsteDagIInneværendeMåned(), tom = it.stønadTom.sisteDagIInneværendeMåned()) }
299+
.tilTidslinje()
213300
}
214301

215302
interface FagsakMedFlereMigreringer {
216303
val fagsakId: Long
217304
val fødselsnummer: String
218305
}
306+
307+
data class AndelTilkjentYtelseKorreksjon(
308+
val andelMedFeil: AndelTilkjentYtelse,
309+
val korrigertAndel: AndelTilkjentYtelse,
310+
)
311+
312+
fun List<AndelTilkjentYtelseKorreksjon>.tilAndelerTilkjentYtelseKorreksjonerDto() =
313+
this.map {
314+
AndelTilkjentYtelseKorreksjonDto(
315+
andelMedFeil = it.andelMedFeil.tilAndelTilkjentYtelseDto(),
316+
korrigertAndel = it.korrigertAndel.tilAndelTilkjentYtelseDto(),
317+
)
318+
}
319+
320+
fun AndelTilkjentYtelse.tilAndelTilkjentYtelseDto() =
321+
AndelTilkjentYtelseDto(
322+
id = this.id,
323+
stønadFom = this.stønadFom,
324+
stønadTom = this.stønadTom,
325+
beløp = this.kalkulertUtbetalingsbeløp,
326+
periodeId = this.periodeOffset,
327+
forrigePeriodeId = this.forrigePeriodeOffset,
328+
kildeBehandlingId = this.kildeBehandlingId,
329+
)
330+
331+
data class AndelTilkjentYtelseKorreksjonDto(
332+
val andelMedFeil: AndelTilkjentYtelseDto,
333+
val korrigertAndel: AndelTilkjentYtelseDto,
334+
)
335+
336+
data class AndelTilkjentYtelseDto(
337+
val id: Long,
338+
val stønadFom: YearMonth,
339+
val stønadTom: YearMonth,
340+
val beløp: Int,
341+
val periodeId: Long?,
342+
val forrigePeriodeId: Long?,
343+
val kildeBehandlingId: Long?,
344+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package no.nav.familie.ba.sak.kjerne.beregning.domene
2+
3+
import jakarta.persistence.Column
4+
import jakarta.persistence.Convert
5+
import jakarta.persistence.Entity
6+
import jakarta.persistence.EntityListeners
7+
import jakarta.persistence.EnumType
8+
import jakarta.persistence.Enumerated
9+
import jakarta.persistence.Id
10+
import jakarta.persistence.Table
11+
import no.nav.familie.ba.sak.common.YearMonthConverter
12+
import no.nav.familie.ba.sak.sikkerhet.RollestyringMotDatabase
13+
import no.nav.familie.ba.sak.sikkerhet.SikkerhetContext
14+
import java.math.BigDecimal
15+
import java.time.LocalDateTime
16+
import java.time.YearMonth
17+
18+
@EntityListeners(RollestyringMotDatabase::class)
19+
@Entity(name = "PatchetAndelTilkjentYtelse")
20+
@Table(name = "PATCHET_ANDEL_TILKJENT_YTELSE")
21+
data class PatchetAndelTilkjentYtelse(
22+
@Id
23+
@Column(name = "id")
24+
val id: Long,
25+
@Column(name = "behandling_id", nullable = false, updatable = false)
26+
val behandlingId: Long,
27+
@Column(name = "tilkjent_ytelse_id", nullable = false, updatable = false)
28+
var tilkjentYtelseId: Long,
29+
@Column(name = "aktoer_id", nullable = false, updatable = false)
30+
val aktørId: String,
31+
@Column(name = "kalkulert_utbetalingsbelop", nullable = false)
32+
val kalkulertUtbetalingsbeløp: Int,
33+
@Column(name = "stonad_fom", nullable = false, columnDefinition = "DATE")
34+
@Convert(converter = YearMonthConverter::class)
35+
val stønadFom: YearMonth,
36+
@Column(name = "stonad_tom", nullable = false, columnDefinition = "DATE")
37+
@Convert(converter = YearMonthConverter::class)
38+
val stønadTom: YearMonth,
39+
@Enumerated(EnumType.STRING)
40+
@Column(name = "type", nullable = false)
41+
val type: YtelseType,
42+
@Column(name = "sats", nullable = false)
43+
val sats: Int,
44+
@Column(name = "prosent", nullable = false)
45+
val prosent: BigDecimal,
46+
@Column(name = "kilde_behandling_id")
47+
var kildeBehandlingId: Long? = null,
48+
@Column(name = "periode_offset")
49+
var periodeOffset: Long? = null,
50+
@Column(name = "forrige_periode_offset")
51+
var forrigePeriodeOffset: Long? = null,
52+
@Column(name = "nasjonalt_periodebelop")
53+
val nasjonaltPeriodebeløp: Int?,
54+
@Column(name = "differanseberegnet_periodebelop")
55+
val differanseberegnetPeriodebeløp: Int? = null,
56+
@Column(name = "opprettet_av", nullable = false, updatable = false)
57+
val opprettetAv: String = SikkerhetContext.hentSaksbehandler(),
58+
@Column(name = "opprettet_tid", nullable = false, updatable = false)
59+
val opprettetTidspunkt: LocalDateTime = LocalDateTime.now(),
60+
@Column(name = "endret_av")
61+
val endretAv: String = SikkerhetContext.hentSaksbehandler(),
62+
@Column(name = "endret_tid")
63+
val endretTidspunkt: LocalDateTime = LocalDateTime.now(),
64+
@Column(name = "versjon", nullable = false)
65+
val versjon: Long = 0,
66+
)
67+
68+
fun AndelTilkjentYtelse.tilPatchetAndelTilkjentYtelse(): PatchetAndelTilkjentYtelse =
69+
PatchetAndelTilkjentYtelse(
70+
id = this.id,
71+
behandlingId = this.behandlingId,
72+
tilkjentYtelseId = this.tilkjentYtelse.id,
73+
aktørId = this.aktør.aktørId,
74+
kalkulertUtbetalingsbeløp = this.kalkulertUtbetalingsbeløp,
75+
stønadFom = this.stønadFom,
76+
stønadTom = this.stønadTom,
77+
type = this.type,
78+
sats = this.sats,
79+
prosent = this.prosent,
80+
kildeBehandlingId = this.kildeBehandlingId,
81+
periodeOffset = this.periodeOffset,
82+
forrigePeriodeOffset = this.forrigePeriodeOffset,
83+
nasjonaltPeriodebeløp = this.nasjonaltPeriodebeløp,
84+
differanseberegnetPeriodebeløp = this.differanseberegnetPeriodebeløp,
85+
opprettetAv = this.opprettetAv,
86+
opprettetTidspunkt = this.opprettetTidspunkt,
87+
endretAv = this.endretAv,
88+
endretTidspunkt = this.endretTidspunkt,
89+
versjon = this.versjon,
90+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package no.nav.familie.ba.sak.kjerne.beregning.domene
2+
3+
import org.springframework.data.jpa.repository.JpaRepository
4+
5+
interface PatchetAndelTilkjentYtelseRepository : JpaRepository<PatchetAndelTilkjentYtelse, Long>

0 commit comments

Comments
 (0)