Skip to content

Commit f43e4a1

Browse files
authored
Refaktorering privat avtale delberegning (#541)
* Refaktorering privat avtale delberegning * Refaktorering privat avtale delberegning
1 parent 3c60ae1 commit f43e4a1

File tree

10 files changed

+180
-218
lines changed

10 files changed

+180
-218
lines changed

bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/mapper/EndringSjekkGrensePeriodeMapper.kt

+10-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import no.nav.bidrag.beregn.core.service.mapper.CoreMapper
88
import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype
99
import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag
1010
import no.nav.bidrag.transport.behandling.felles.grunnlag.BeløpshistorikkGrunnlag
11-
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtalePeriode
11+
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtale
1212
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
1313
import no.nav.bidrag.transport.behandling.felles.grunnlag.SluttberegningBarnebidrag
1414
import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerOgKonverterBasertPåEgenReferanse
@@ -52,11 +52,13 @@ internal object EndringSjekkGrensePeriodeMapper : CoreMapper() {
5252
.firstOrNull()
5353

5454
private fun mapPrivatAvtale(beregnGrunnlag: BeregnGrunnlag): List<PrivatAvtaleIndeksregulertPeriodeGrunnlag> = beregnGrunnlag.grunnlagListe
55-
.filtrerOgKonverterBasertPåEgenReferanse<DelberegningPrivatAvtalePeriode>(Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE_PERIODE)
56-
.map {
57-
PrivatAvtaleIndeksregulertPeriodeGrunnlag(
58-
referanse = it.referanse,
59-
privatAvtaleIndeksregulertPeriode = it.innhold,
60-
)
61-
}
55+
.filtrerOgKonverterBasertPåEgenReferanse<DelberegningPrivatAvtale>(Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE)
56+
.firstOrNull()?.let { dpa ->
57+
dpa.innhold.perioder.map {
58+
PrivatAvtaleIndeksregulertPeriodeGrunnlag(
59+
referanse = dpa.referanse,
60+
privatAvtaleIndeksregulertPeriode = it,
61+
)
62+
}
63+
} ?: emptyList()
6264
}

bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/service/BeregnBarnebidragService.kt

+16-11
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import no.nav.bidrag.transport.behandling.beregning.felles.valider
3333
import no.nav.bidrag.transport.behandling.felles.grunnlag.BeløpshistorikkGrunnlag
3434
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningEndringSjekkGrense
3535
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningEndringSjekkGrensePeriode
36-
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtalePeriode
36+
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtale
3737
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
3838
import no.nav.bidrag.transport.behandling.felles.grunnlag.Person
3939
import no.nav.bidrag.transport.behandling.felles.grunnlag.PrivatAvtaleGrunnlag
@@ -136,8 +136,8 @@ class BeregnBarnebidragService : BeregnService() {
136136
endeligResultatGrunnlagListe.addAll(
137137
mapPersonobjektGrunnlag(
138138
resultatGrunnlagListe = endeligResultatGrunnlagListe,
139-
personobjektGrunnlagListe = mottattGrunnlag.grunnlagListe
140-
)
139+
personobjektGrunnlagListe = mottattGrunnlag.grunnlagListe,
140+
),
141141
)
142142

143143
val beregnetBarnebidragResultat = BeregnetBarnebidragResultat(
@@ -530,13 +530,15 @@ class BeregnBarnebidragService : BeregnService() {
530530

531531
// Henter resultat av delberegning privat-avtale-periode
532532
val delberegningIndeksreguleringPrivatAvtalePeriodeGrunnlagListe = delberegningIndeksreguleringPrivatAvtalePeriodeResultat
533-
.filtrerOgKonverterBasertPåEgenReferanse<DelberegningPrivatAvtalePeriode>(Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE_PERIODE)
534-
.map {
535-
PrivatAvtaleIndeksregulertPeriodeGrunnlag(
536-
referanse = it.referanse,
537-
privatAvtaleIndeksregulertPeriode = it.innhold,
538-
)
539-
}
533+
.filtrerOgKonverterBasertPåEgenReferanse<DelberegningPrivatAvtale>(Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE)
534+
.firstOrNull()?.let { dpa ->
535+
dpa.innhold.perioder.map {
536+
PrivatAvtaleIndeksregulertPeriodeGrunnlag(
537+
referanse = dpa.referanse,
538+
privatAvtaleIndeksregulertPeriode = it,
539+
)
540+
}
541+
} ?: emptyList()
540542

541543
// Bruker grunnlagslisten fra delberegning endring-sjekk-grense-periode som utgangspunkt for å lage resultatperioder
542544
return delberegningEndringSjekkGrensePeriodeGrunnlagListe
@@ -574,7 +576,10 @@ class BeregnBarnebidragService : BeregnService() {
574576
delberegningIndeksregPrivatAvtalePeriodeGrunnlagListe: List<PrivatAvtaleIndeksregulertPeriodeGrunnlag>,
575577
): BigDecimal? {
576578
val privatAvtaleBeløp = delberegningIndeksregPrivatAvtalePeriodeGrunnlagListe
577-
.filter { it.referanse in referanseListe }
579+
.filter {
580+
(periode.til == null || it.privatAvtaleIndeksregulertPeriode.periode.fom < periode.til) &&
581+
(it.privatAvtaleIndeksregulertPeriode.periode.til == null || it.privatAvtaleIndeksregulertPeriode.periode.til!! > periode.fom)
582+
}
578583
.map { it.privatAvtaleIndeksregulertPeriode.beløp }
579584
.firstOrNull()
580585
val beløpshistorikkBeløp = beløpshistorikkPeriodeGrunnlag?.beløpshistorikkPeriode?.beløpshistorikk

bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/service/BeregnIndeksreguleringPrivatAvtaleService.kt

+50-53
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ import no.nav.bidrag.domene.tid.ÅrMånedsperiode
1313
import no.nav.bidrag.domene.util.avrundetMedNullDesimaler
1414
import no.nav.bidrag.domene.util.avrundetTilNærmesteTier
1515
import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag
16+
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtale
1617
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtalePeriode
1718
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
1819
import no.nav.bidrag.transport.behandling.felles.grunnlag.Grunnlagsreferanse
1920
import no.nav.bidrag.transport.behandling.felles.grunnlag.PrivatAvtaleGrunnlag
2021
import no.nav.bidrag.transport.behandling.felles.grunnlag.PrivatAvtalePeriodeGrunnlag
2122
import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerOgKonverterBasertPåEgenReferanse
22-
import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt
2323
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettDelberegningreferanse
2424
import java.math.BigDecimal
2525
import java.time.LocalDate
@@ -75,16 +75,15 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
7575
}
7676

7777
// Lager liste over bruddperioder
78-
val beregningsperiodeListe = lagBruddperiodeListe(
78+
val (indeksregulerPeriode, beregningsperiodeListe) = lagBruddperiodeListe(
7979
privatAvtale = privatAvtale,
8080
privatAvtaleListe = privatAvtalePeriodeListe,
8181
beregningsperiode = periode,
8282
)
8383

84-
val resultatliste = mutableListOf<GrunnlagDto>()
84+
val resultatliste = mutableListOf<DelberegningPrivatAvtalePeriode>()
8585

8686
var beløpFraForrigeDelberegning: BigDecimal? = null
87-
var referanseForrigeDelberegning: String? = null
8887

8988
beregningsperiodeListe.forEach {
9089
val grunnlagBeregning = lagIndeksreguleringBeregningGrunnlag(
@@ -96,45 +95,67 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
9695
privatAvtalePeriodeListe = privatAvtalePeriodeListe,
9796
sjablonIndeksreguleringFaktorListe = sjablonIndeksreguleringFaktorListe,
9897
beløpFraForrigeDelberegning = beløpFraForrigeDelberegning,
99-
referanseForrigeDelberegning = referanseForrigeDelberegning,
10098
)
10199

102100
val resultat = beregn(grunnlagBeregning)
103101

104102
if (it.periodeSkalIndeksreguleres) {
105-
beløpFraForrigeDelberegning = resultat.innholdTilObjekt<DelberegningPrivatAvtalePeriode>().beløp
106-
referanseForrigeDelberegning = resultat.referanse
103+
beløpFraForrigeDelberegning = resultat.beløp
107104
}
108105

109106
resultatliste.add(resultat)
110107
}
111108

109+
val delberegningPrivatAvtaleGrunnlag = listOf(
110+
GrunnlagDto(
111+
type = Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE,
112+
referanse = opprettDelberegningreferanse(
113+
type = Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE,
114+
periode = grunnlag.periode,
115+
søknadsbarnReferanse = grunnlag.søknadsbarnReferanse,
116+
gjelderReferanse = referanseTilBP,
117+
),
118+
innhold = POJONode(
119+
DelberegningPrivatAvtale(
120+
nesteIndeksreguleringsår = indeksregulerPeriode.year.toBigDecimal(),
121+
perioder = resultatliste,
122+
),
123+
),
124+
gjelderReferanse = referanseTilBP,
125+
gjelderBarnReferanse = grunnlag.søknadsbarnReferanse,
126+
grunnlagsreferanseListe = listOf(privatAvtale.referanse) + privatAvtalePeriodeListe.map { it.referanse },
127+
128+
),
129+
)
130+
112131
// Mapper ut grunnlag som er brukt i beregningen (mottatte grunnlag og sjabloner)
113132
val resultatGrunnlagListe = mapDelberegningResultatGrunnlag(
114-
grunnlagReferanseListe = resultatliste
115-
.flatMap { it.grunnlagsreferanseListe }
116-
.distinct(),
133+
grunnlagReferanseListe =
134+
delberegningPrivatAvtaleGrunnlag.map { it.referanse } +
135+
privatAvtalePeriodeListe.map { it.referanse } +
136+
privatAvtale.referanse,
117137
mottattGrunnlag = grunnlag,
118138
sjablonGrunnlag = sjablonListe,
119139
).toMutableList()
120140

121141
// Mapper ut grunnlag for Person-objekter som er brukt
122142
resultatGrunnlagListe.addAll(
123143
mapPersonobjektGrunnlag(
124-
resultatGrunnlagListe = resultatGrunnlagListe + resultatliste,
125-
personobjektGrunnlagListe = grunnlag.grunnlagListe
126-
)
144+
resultatGrunnlagListe = resultatGrunnlagListe + delberegningPrivatAvtaleGrunnlag,
145+
personobjektGrunnlagListe = grunnlag.grunnlagListe,
146+
),
127147
)
128148

129-
return (resultatliste + resultatGrunnlagListe).distinctBy { it.referanse }.sortedBy { it.referanse }
149+
return (delberegningPrivatAvtaleGrunnlag + resultatGrunnlagListe)
150+
.distinctBy { it.referanse }.sortedBy { it.referanse }
130151
}
131152

132153
// Lager en liste over alle bruddperioder med indikator for indeksregulering
133154
private fun lagBruddperiodeListe(
134155
privatAvtale: PrivatAvtale,
135156
privatAvtaleListe: List<PrivatAvtalePeriode>,
136157
beregningsperiode: ÅrMånedsperiode,
137-
): List<Beregningsperiode> {
158+
): Pair<YearMonth, List<Beregningsperiode>> {
138159
var beregningsperiodeListe = mutableListOf<Beregningsperiode>()
139160

140161
var indeksregulerPeriode = maxOf(
@@ -184,7 +205,7 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
184205
privatAvtaleListe.asSequence().map { Beregningsperiode(periode = it.periode, periodeSkalIndeksreguleres = false) }.toList()
185206
.toMutableList()
186207
}
187-
return beregningsperiodeListe.sortedBy { it.periode.fom }
208+
return indeksregulerPeriode to beregningsperiodeListe.sortedBy { it.periode.fom }
188209
}
189210

190211
// Lager grunnlag for indeksregulering som ligger innenfor bruddPeriode
@@ -197,7 +218,6 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
197218
privatAvtalePeriodeListe: List<PrivatAvtalePeriode>,
198219
sjablonIndeksreguleringFaktorListe: List<SjablonSjablontallPeriodeGrunnlag>,
199220
beløpFraForrigeDelberegning: BigDecimal?,
200-
referanseForrigeDelberegning: String?,
201221
): IndeksreguleringPrivatAvtaleGrunnlag {
202222
val privatAvtalePeriode = privatAvtalePeriodeListe
203223
.firstOrNull { ÅrMånedsperiode(it.periode.fom, it.periode.til).inneholder(beregningsperiode) }
@@ -237,52 +257,29 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
237257
privatAvtale.referanse,
238258
privatAvtalePeriode.referanse,
239259
sjablonIndeksreguleringFaktor?.referanse,
240-
referanseForrigeDelberegning,
241260
),
242261
)
243262
}
244263

245-
private fun beregn(grunnlag: IndeksreguleringPrivatAvtaleGrunnlag): GrunnlagDto {
246-
val delberegningResultat: DelberegningPrivatAvtalePeriode
247-
248-
if (grunnlag.periodeSkalIndeksreguleres) {
264+
private fun beregn(grunnlag: IndeksreguleringPrivatAvtaleGrunnlag): DelberegningPrivatAvtalePeriode {
265+
val delberegningResultat: DelberegningPrivatAvtalePeriode = if (grunnlag.periodeSkalIndeksreguleres) {
249266
val indeksreguleringFaktor = BigDecimal.valueOf(grunnlag.sjablonIndeksreguleringFaktor!!.verdi).divide(BigDecimal(100)).setScale(4)
250267
val beløp = grunnlag.beløpFraForrigeDelberegning ?: grunnlag.privatAvtalePeriode.beløp
251268
val indeksregulertBeløp = beløp.plus(beløp.multiply(indeksreguleringFaktor)).avrundetTilNærmesteTier
252-
delberegningResultat =
253-
DelberegningPrivatAvtalePeriode(
254-
periode = grunnlag.beregningsperiode,
255-
indeksreguleringFaktor = indeksreguleringFaktor,
256-
beløp = indeksregulertBeløp,
257-
)
269+
DelberegningPrivatAvtalePeriode(
270+
periode = grunnlag.beregningsperiode,
271+
indeksreguleringFaktor = indeksreguleringFaktor,
272+
beløp = indeksregulertBeløp,
273+
)
258274
} else {
259-
delberegningResultat =
260-
DelberegningPrivatAvtalePeriode(
261-
periode = grunnlag.beregningsperiode,
262-
indeksreguleringFaktor = null,
263-
beløp = grunnlag.privatAvtalePeriode.beløp.avrundetMedNullDesimaler,
275+
DelberegningPrivatAvtalePeriode(
276+
periode = grunnlag.beregningsperiode,
277+
indeksreguleringFaktor = null,
278+
beløp = grunnlag.privatAvtalePeriode.beløp.avrundetMedNullDesimaler,
264279

265-
)
280+
)
266281
}
267-
268-
val resultat =
269-
GrunnlagDto(
270-
type = Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE_PERIODE,
271-
referanse = opprettDelberegningreferanse(
272-
type = Grunnlagstype.DELBEREGNING_PRIVAT_AVTALE_PERIODE,
273-
periode = grunnlag.beregningsperiode,
274-
søknadsbarnReferanse = grunnlag.søknadsbarnReferanse,
275-
gjelderReferanse = grunnlag.referanseTilRolle,
276-
),
277-
innhold = POJONode(
278-
delberegningResultat,
279-
),
280-
gjelderReferanse = grunnlag.referanseTilRolle,
281-
gjelderBarnReferanse = grunnlag.søknadsbarnReferanse,
282-
grunnlagsreferanseListe = grunnlag.referanseliste,
283-
284-
)
285-
return resultat
282+
return delberegningResultat
286283
}
287284
}
288285

bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/service/VedtakService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private fun StønadDto?.tilGrunnlag(personer: List<GrunnlagDto>, stønadsid: St
123123
POJONode(
124124
BeløpshistorikkGrunnlag(
125125
tidspunktInnhentet = LocalDateTime.now(),
126-
førsteIndeksreguleringsår = this?.førsteIndeksreguleringsår,
126+
nesteIndeksreguleringsår = this?.nesteIndeksreguleringsår ?: this?.førsteIndeksreguleringsår,
127127
beløpshistorikk =
128128
this?.periodeListe?.map {
129129
BeløpshistorikkPeriode(

0 commit comments

Comments
 (0)