@@ -13,13 +13,13 @@ import no.nav.bidrag.domene.tid.ÅrMånedsperiode
13
13
import no.nav.bidrag.domene.util.avrundetMedNullDesimaler
14
14
import no.nav.bidrag.domene.util.avrundetTilNærmesteTier
15
15
import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag
16
+ import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtale
16
17
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningPrivatAvtalePeriode
17
18
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
18
19
import no.nav.bidrag.transport.behandling.felles.grunnlag.Grunnlagsreferanse
19
20
import no.nav.bidrag.transport.behandling.felles.grunnlag.PrivatAvtaleGrunnlag
20
21
import no.nav.bidrag.transport.behandling.felles.grunnlag.PrivatAvtalePeriodeGrunnlag
21
22
import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerOgKonverterBasertPåEgenReferanse
22
- import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt
23
23
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettDelberegningreferanse
24
24
import java.math.BigDecimal
25
25
import java.time.LocalDate
@@ -75,16 +75,15 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
75
75
}
76
76
77
77
// Lager liste over bruddperioder
78
- val beregningsperiodeListe = lagBruddperiodeListe(
78
+ val (indeksregulerPeriode, beregningsperiodeListe) = lagBruddperiodeListe(
79
79
privatAvtale = privatAvtale,
80
80
privatAvtaleListe = privatAvtalePeriodeListe,
81
81
beregningsperiode = periode,
82
82
)
83
83
84
- val resultatliste = mutableListOf<GrunnlagDto >()
84
+ val resultatliste = mutableListOf<DelberegningPrivatAvtalePeriode >()
85
85
86
86
var beløpFraForrigeDelberegning: BigDecimal ? = null
87
- var referanseForrigeDelberegning: String? = null
88
87
89
88
beregningsperiodeListe.forEach {
90
89
val grunnlagBeregning = lagIndeksreguleringBeregningGrunnlag(
@@ -96,45 +95,67 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
96
95
privatAvtalePeriodeListe = privatAvtalePeriodeListe,
97
96
sjablonIndeksreguleringFaktorListe = sjablonIndeksreguleringFaktorListe,
98
97
beløpFraForrigeDelberegning = beløpFraForrigeDelberegning,
99
- referanseForrigeDelberegning = referanseForrigeDelberegning,
100
98
)
101
99
102
100
val resultat = beregn(grunnlagBeregning)
103
101
104
102
if (it.periodeSkalIndeksreguleres) {
105
- beløpFraForrigeDelberegning = resultat.innholdTilObjekt<DelberegningPrivatAvtalePeriode >().beløp
106
- referanseForrigeDelberegning = resultat.referanse
103
+ beløpFraForrigeDelberegning = resultat.beløp
107
104
}
108
105
109
106
resultatliste.add(resultat)
110
107
}
111
108
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
+
112
131
// Mapper ut grunnlag som er brukt i beregningen (mottatte grunnlag og sjabloner)
113
132
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,
117
137
mottattGrunnlag = grunnlag,
118
138
sjablonGrunnlag = sjablonListe,
119
139
).toMutableList()
120
140
121
141
// Mapper ut grunnlag for Person-objekter som er brukt
122
142
resultatGrunnlagListe.addAll(
123
143
mapPersonobjektGrunnlag(
124
- resultatGrunnlagListe = resultatGrunnlagListe + resultatliste ,
125
- personobjektGrunnlagListe = grunnlag.grunnlagListe
126
- )
144
+ resultatGrunnlagListe = resultatGrunnlagListe + delberegningPrivatAvtaleGrunnlag ,
145
+ personobjektGrunnlagListe = grunnlag.grunnlagListe,
146
+ ),
127
147
)
128
148
129
- return (resultatliste + resultatGrunnlagListe).distinctBy { it.referanse }.sortedBy { it.referanse }
149
+ return (delberegningPrivatAvtaleGrunnlag + resultatGrunnlagListe)
150
+ .distinctBy { it.referanse }.sortedBy { it.referanse }
130
151
}
131
152
132
153
// Lager en liste over alle bruddperioder med indikator for indeksregulering
133
154
private fun lagBruddperiodeListe (
134
155
privatAvtale : PrivatAvtale ,
135
156
privatAvtaleListe : List <PrivatAvtalePeriode >,
136
157
beregningsperiode : ÅrMånedsperiode,
137
- ): List <Beregningsperiode > {
158
+ ): Pair < YearMonth , List <Beregningsperiode > > {
138
159
var beregningsperiodeListe = mutableListOf<Beregningsperiode >()
139
160
140
161
var indeksregulerPeriode = maxOf(
@@ -184,7 +205,7 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
184
205
privatAvtaleListe.asSequence().map { Beregningsperiode (periode = it.periode, periodeSkalIndeksreguleres = false ) }.toList()
185
206
.toMutableList()
186
207
}
187
- return beregningsperiodeListe.sortedBy { it.periode.fom }
208
+ return indeksregulerPeriode to beregningsperiodeListe.sortedBy { it.periode.fom }
188
209
}
189
210
190
211
// Lager grunnlag for indeksregulering som ligger innenfor bruddPeriode
@@ -197,7 +218,6 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
197
218
privatAvtalePeriodeListe : List <PrivatAvtalePeriode >,
198
219
sjablonIndeksreguleringFaktorListe : List <SjablonSjablontallPeriodeGrunnlag >,
199
220
beløpFraForrigeDelberegning : BigDecimal ? ,
200
- referanseForrigeDelberegning : String? ,
201
221
): IndeksreguleringPrivatAvtaleGrunnlag {
202
222
val privatAvtalePeriode = privatAvtalePeriodeListe
203
223
.firstOrNull { ÅrMånedsperiode(it.periode.fom, it.periode.til).inneholder(beregningsperiode) }
@@ -237,52 +257,29 @@ internal object BeregnIndeksreguleringPrivatAvtaleService : BeregnService() {
237
257
privatAvtale.referanse,
238
258
privatAvtalePeriode.referanse,
239
259
sjablonIndeksreguleringFaktor?.referanse,
240
- referanseForrigeDelberegning,
241
260
),
242
261
)
243
262
}
244
263
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) {
249
266
val indeksreguleringFaktor = BigDecimal .valueOf(grunnlag.sjablonIndeksreguleringFaktor!! .verdi).divide(BigDecimal (100 )).setScale(4 )
250
267
val beløp = grunnlag.beløpFraForrigeDelberegning ? : grunnlag.privatAvtalePeriode.beløp
251
268
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
+ )
258
274
} 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,
264
279
265
- )
280
+ )
266
281
}
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
286
283
}
287
284
}
288
285
0 commit comments