Skip to content

Commit c063eaf

Browse files
Merge pull request #481 from navikt/feature/barnebidrag-avslag-barnet-bor-hos-bp
Feature/barnebidrag avslag barnet bor hos bp
2 parents d033b89 + e420a6c commit c063eaf

36 files changed

+1014
-27
lines changed

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/beregning/EndeligBidragBeregning.kt

+12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ import java.math.BigDecimal
1010
internal object EndeligBidragBeregning {
1111

1212
fun beregn(grunnlag: EndeligBidragBeregningGrunnlag): EndeligBidragBeregningResultat {
13+
// Hvis søknadsbarnet bor hos BP gjøres det ingen videre beregning (skal resultere i avslag og bidragsbeløp settes til null
14+
if (grunnlag.søknadsbarnetBorHosBpGrunnlag.søknadsbarnetBorHosBp) {
15+
return EndeligBidragBeregningResultat(
16+
ikkeOmsorgForBarnet = true,
17+
beregnetBeløp = null,
18+
resultatBeløp = null,
19+
grunnlagsreferanseListe = listOf(grunnlag.søknadsbarnetBorHosBpGrunnlag.referanse)
20+
)
21+
}
22+
1323
// Hvis barnet er selvforsørget gjøres det ingen videre beregning
1424
if (grunnlag.bpAndelUnderholdskostnadBeregningGrunnlag.barnetErSelvforsørget) {
1525
return EndeligBidragBeregningResultat(
@@ -72,6 +82,7 @@ internal object EndeligBidragBeregning {
7282
grunnlag.bpAndelUnderholdskostnadBeregningGrunnlag.referanse,
7383
grunnlag.samværsfradragBeregningGrunnlag.referanse,
7484
grunnlag.deltBostedBeregningGrunnlag.referanse,
85+
grunnlag.søknadsbarnetBorHosBpGrunnlag.referanse,
7586
grunnlag.barnetilleggBPBeregningGrunnlag?.referanse,
7687
grunnlag.barnetilleggBMBeregningGrunnlag?.referanse,
7788
) + grunnlag.engangsreferanser,
@@ -162,6 +173,7 @@ internal object EndeligBidragBeregning {
162173
grunnlag.bpAndelUnderholdskostnadBeregningGrunnlag.referanse,
163174
grunnlag.samværsfradragBeregningGrunnlag.referanse,
164175
grunnlag.deltBostedBeregningGrunnlag.referanse,
176+
grunnlag.søknadsbarnetBorHosBpGrunnlag.referanse,
165177
grunnlag.barnetilleggBPBeregningGrunnlag?.referanse,
166178
grunnlag.barnetilleggBMBeregningGrunnlag?.referanse,
167179
) + grunnlag.engangsreferanser,

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/beregning/EndringSjekkGrensePeriodeBeregning.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ internal object EndringSjekkGrensePeriodeBeregning {
1717
val sjablonverdiEndringBidragGrenseProsent = hentSjablonverdi(grunnlag)
1818
val endringsgrenseFaktor = sjablonverdiEndringBidragGrenseProsent.divide(bigDecimal100, 10, RoundingMode.HALF_UP)
1919

20-
// Beregner faktisk endring. Hvis det ikke er noe løpende bidrag, settes faktisk endring til null.
20+
// Beregner faktisk endring. Hvis det ikke er noe løpende bidrag eller beregnet bidrag er null, settes faktisk endring til null.
2121
val faktiskEndringFaktor =
22-
if (grunnlag.løpendeBidragBeregningGrunnlag?.beløp != null) {
22+
if (grunnlag.løpendeBidragBeregningGrunnlag?.beløp != null && grunnlag.beregnetBidragBeregningGrunnlag.beløp != null) {
2323
grunnlag.beregnetBidragBeregningGrunnlag.beløp
2424
.divide(grunnlag.løpendeBidragBeregningGrunnlag.beløp, 10, RoundingMode.HALF_UP)
2525
.minus(BigDecimal(1))

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/bo/EndeligBidragBO.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import no.nav.bidrag.domene.tid.ÅrMånedsperiode
44
import no.nav.bidrag.domene.util.avrundetMedNullDesimaler
55
import no.nav.bidrag.domene.util.avrundetMedTiDesimaler
66
import no.nav.bidrag.domene.util.avrundetMedToDesimaler
7+
import no.nav.bidrag.transport.behandling.felles.grunnlag.BostatusPeriode
78
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragsevne
89
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndel
910
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningNettoBarnetillegg
@@ -19,6 +20,7 @@ data class EndeligBidragPeriodeGrunnlag(
1920
val bpAndelUnderholdskostnadDelberegningPeriodeGrunnlagListe: List<BpAndelUnderholdskostnadDelberegningPeriodeGrunnlag>,
2021
val samværsfradragDelberegningPeriodeGrunnlagListe: List<SamværsfradragDelberegningPeriodeGrunnlag>,
2122
val samværsklassePeriodeGrunnlagListe: List<SamværsklassePeriodeGrunnlag>,
23+
val bostatusPeriodeGrunnlagListe: List<BostatusPeriodeGrunnlag>,
2224
val nettoBarnetilleggBPDelberegningPeriodeGrunnlagListe: List<NettoBarnetilleggDelberegningPeriodeGrunnlag>,
2325
val nettoBarnetilleggBMDelberegningPeriodeGrunnlagListe: List<NettoBarnetilleggDelberegningPeriodeGrunnlag>,
2426
val beløpshistorikkForskuddPeriodeGrunnlag: BeløpshistorikkPeriodeGrunnlag?,
@@ -35,6 +37,8 @@ data class BpAndelUnderholdskostnadDelberegningPeriodeGrunnlag(
3537

3638
data class SamværsfradragDelberegningPeriodeGrunnlag(val referanse: String, val samværsfradragPeriode: DelberegningSamværsfradrag)
3739

40+
data class BostatusPeriodeGrunnlag(val referanse: String, val bostatusPeriode: BostatusPeriode)
41+
3842
data class NettoBarnetilleggDelberegningPeriodeGrunnlag(val referanse: String, val nettoBarnetilleggPeriode: DelberegningNettoBarnetillegg)
3943

4044
data class BegrensetRevurderingPeriodeGrunnlag(val referanse: String, val begrensetRevurdering: Boolean)
@@ -47,6 +51,7 @@ data class EndeligBidragBeregningGrunnlag(
4751
val bpAndelUnderholdskostnadBeregningGrunnlag: BpAndelUnderholdskostnadDelberegningBeregningGrunnlag,
4852
val samværsfradragBeregningGrunnlag: SamværsfradragDelberegningBeregningGrunnlag,
4953
val deltBostedBeregningGrunnlag: DeltBostedBeregningGrunnlag,
54+
valknadsbarnetBorHosBpGrunnlag: SøknadsbarnetBorHosBpGrunnlag,
5055
val barnetilleggBPBeregningGrunnlag: BarnetilleggDelberegningBeregningGrunnlag?,
5156
val barnetilleggBMBeregningGrunnlag: BarnetilleggDelberegningBeregningGrunnlag?,
5257
val løpendeForskuddBeløp: BigDecimal?,
@@ -70,11 +75,13 @@ data class SamværsfradragDelberegningBeregningGrunnlag(val referanse: String, v
7075

7176
data class DeltBostedBeregningGrunnlag(val referanse: String, val deltBosted: Boolean)
7277

78+
data class SøknadsbarnetBorHosBpGrunnlag(val referanse: String, valknadsbarnetBorHosBp: Boolean)
79+
7380
data class BarnetilleggDelberegningBeregningGrunnlag(val referanse: String, val beløp: BigDecimal)
7481

7582
data class EndeligBidragBeregningResultat(
76-
val beregnetBeløp: BigDecimal = BigDecimal.ZERO.avrundetMedToDesimaler,
77-
val resultatBeløp: BigDecimal = BigDecimal.ZERO.avrundetMedNullDesimaler,
83+
val beregnetBeløp: BigDecimal? = BigDecimal.ZERO.avrundetMedToDesimaler,
84+
val resultatBeløp: BigDecimal? = BigDecimal.ZERO.avrundetMedNullDesimaler,
7885
val uMinusNettoBarnetilleggBM: BigDecimal = BigDecimal.ZERO.avrundetMedToDesimaler,
7986
val bruttoBidragEtterBarnetilleggBM: BigDecimal = BigDecimal.ZERO.avrundetMedToDesimaler,
8087
val nettoBidragEtterBarnetilleggBM: BigDecimal = BigDecimal.ZERO.avrundetMedToDesimaler,
@@ -96,6 +103,7 @@ data class EndeligBidragBeregningResultat(
96103
val bidragJustertTilForskuddssats: Boolean = false,
97104
val beregnetBeløpErLavereEnnLøpendeBidrag: Boolean = false,
98105
val begrensetRevurderingUtført: Boolean = false,
106+
val ikkeOmsorgForBarnet: Boolean = false,
99107
val beregnetBidragErLavereEnnLøpendeBidrag: Boolean = false,
100108
val grunnlagsreferanseListe: List<String> = emptyList(),
101109
)

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/bo/EndringSjekkGrensePeriodeBO.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ data class EndringSjekkGrensePeriodeBeregningGrunnlag(
2121
val sjablonSjablontallBeregningGrunnlagListe: List<SjablonSjablontallBeregningGrunnlag>,
2222
)
2323

24-
data class BeregnetBidragBeregningGrunnlag(val referanse: String, val beløp: BigDecimal)
24+
data class BeregnetBidragBeregningGrunnlag(val referanse: String, val beløp: BigDecimal?)
2525

2626
data class LøpendeBidragBeregningGrunnlag(val referanse: String, val beløp: BigDecimal?)
2727

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/mapper/EndeligBidragMapper.kt

+21
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package no.nav.bidrag.beregn.barnebidrag.mapper
33
import no.nav.bidrag.beregn.barnebidrag.bo.BegrensetRevurderingPeriodeGrunnlag
44
import no.nav.bidrag.beregn.barnebidrag.bo.BeløpshistorikkPeriodeGrunnlag
55
import no.nav.bidrag.beregn.barnebidrag.bo.BidragsevneDelberegningPeriodeGrunnlag
6+
import no.nav.bidrag.beregn.barnebidrag.bo.BostatusPeriodeGrunnlag
67
import no.nav.bidrag.beregn.barnebidrag.bo.BpAndelUnderholdskostnadDelberegningPeriodeGrunnlag
78
import no.nav.bidrag.beregn.barnebidrag.bo.EndeligBidragPeriodeGrunnlag
89
import no.nav.bidrag.beregn.barnebidrag.bo.NettoBarnetilleggDelberegningPeriodeGrunnlag
@@ -13,6 +14,7 @@ import no.nav.bidrag.beregn.core.service.mapper.CoreMapper
1314
import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype
1415
import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag
1516
import no.nav.bidrag.transport.behandling.felles.grunnlag.BeløpshistorikkGrunnlag
17+
import no.nav.bidrag.transport.behandling.felles.grunnlag.BostatusPeriode
1618
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragsevne
1719
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndel
1820
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningNettoBarnetillegg
@@ -35,6 +37,7 @@ internal object EndeligBidragMapper : CoreMapper() {
3537
bpAndelUnderholdskostnadDelberegningPeriodeGrunnlagListe = mapBpAndelUnderholdskostnad(mottattGrunnlag),
3638
samværsfradragDelberegningPeriodeGrunnlagListe = mapSamværsfradrag(mottattGrunnlag),
3739
samværsklassePeriodeGrunnlagListe = mapSamværsklasse(mottattGrunnlag),
40+
bostatusPeriodeGrunnlagListe = mapBostatus(mottattGrunnlag),
3841
nettoBarnetilleggBPDelberegningPeriodeGrunnlagListe = mapNettoBarnetillegg(
3942
beregnGrunnlag = mottattGrunnlag,
4043
referanseTilRolle = finnReferanseTilRolle(
@@ -159,6 +162,24 @@ internal object EndeligBidragMapper : CoreMapper() {
159162
}
160163
}
161164

165+
private fun mapBostatus(beregnGrunnlag: BeregnGrunnlag): List<BostatusPeriodeGrunnlag> {
166+
try {
167+
return beregnGrunnlag.grunnlagListe
168+
.filtrerOgKonverterBasertPåEgenReferanse<BostatusPeriode>(Grunnlagstype.BOSTATUS_PERIODE)
169+
.filter { it.gjelderBarnReferanse == beregnGrunnlag.søknadsbarnReferanse }
170+
.map {
171+
BostatusPeriodeGrunnlag(
172+
referanse = it.referanse,
173+
bostatusPeriode = it.innhold,
174+
)
175+
}
176+
} catch (e: Exception) {
177+
throw IllegalArgumentException(
178+
"Ugyldig input ved beregning av barnebidrag. Innhold i Grunnlagstype.BOSTATUS_PERIODE er ikke gyldig: " + e.message,
179+
)
180+
}
181+
}
182+
162183
private fun mapNettoBarnetillegg(beregnGrunnlag: BeregnGrunnlag, referanseTilRolle: String): List<NettoBarnetilleggDelberegningPeriodeGrunnlag> {
163184
try {
164185
return beregnGrunnlag.grunnlagListe

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

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.SøknadGrunnlag
3434
import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerOgKonverterBasertPåEgenReferanse
3535
import java.math.BigDecimal
3636
import java.time.YearMonth
37+
import java.util.Collections.emptyList
3738

3839
class BeregnBarnebidragService : BeregnService() {
3940

Diff for: bidrag-beregn-barnebidrag/src/main/kotlin/no/nav/bidrag/beregn/barnebidrag/service/BeregnEndeligBidragService.kt

+15-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import no.nav.bidrag.beregn.barnebidrag.bo.EndeligBidragBeregningGrunnlag
1111
import no.nav.bidrag.beregn.barnebidrag.bo.EndeligBidragPeriodeGrunnlag
1212
import no.nav.bidrag.beregn.barnebidrag.bo.EndeligBidragPeriodeResultat
1313
import no.nav.bidrag.beregn.barnebidrag.bo.SamværsfradragDelberegningBeregningGrunnlag
14+
import no.nav.bidrag.beregn.barnebidrag.bo.SøknadsbarnetBorHosBpGrunnlag
1415
import no.nav.bidrag.beregn.barnebidrag.bo.UnderholdskostnadDelberegningBeregningGrunnlag
1516
import no.nav.bidrag.beregn.barnebidrag.mapper.EndeligBidragMapper.mapEndeligBidragGrunnlag
1617
import no.nav.bidrag.beregn.barnebidrag.mapper.NettoBarnetilleggMapper.finnReferanseTilRolle
@@ -20,6 +21,7 @@ import no.nav.bidrag.beregn.core.service.BeregnService
2021
import no.nav.bidrag.domene.enums.beregning.Samværsklasse
2122
import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype
2223
import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering
24+
import no.nav.bidrag.domene.enums.person.Bostatuskode
2325
import no.nav.bidrag.domene.tid.ÅrMånedsperiode
2426
import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag
2527
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
@@ -113,7 +115,7 @@ internal object BeregnEndeligBidragService : BeregnService() {
113115
val perioderMedFeilListe = mutableListOf<ÅrMånedsperiode>()
114116
var skalKasteBegrensetRevurderingException = false
115117
endeligBidragBeregningResultatListe.forEach {
116-
if ((it.resultat.beregnetBidragErLavereEnnLøpendeBidrag) && (it.resultat.beregnetBeløp > BigDecimal.ZERO)) {
118+
if ((it.resultat.beregnetBidragErLavereEnnLøpendeBidrag) && (it.resultat.beregnetBeløp!! > BigDecimal.ZERO)) {
117119
skalKasteBegrensetRevurderingException = true
118120
val periodeTil = it.periode.til ?: ""
119121
feilmelding += " ${it.periode.fom} - $periodeTil,"
@@ -184,6 +186,7 @@ internal object BeregnEndeligBidragService : BeregnService() {
184186
)
185187
.plus(grunnlagListe.samværsfradragDelberegningPeriodeGrunnlagListe.asSequence().map { it.samværsfradragPeriode.periode })
186188
.plus(grunnlagListe.samværsklassePeriodeGrunnlagListe.asSequence().map { it.samværsklassePeriode.periode })
189+
.plus(grunnlagListe.bostatusPeriodeGrunnlagListe.asSequence().map { it.bostatusPeriode.periode })
187190
.plus(grunnlagListe.nettoBarnetilleggBPDelberegningPeriodeGrunnlagListe.asSequence().map { it.nettoBarnetilleggPeriode.periode })
188191
.plus(grunnlagListe.nettoBarnetilleggBMDelberegningPeriodeGrunnlagListe.asSequence().map { it.nettoBarnetilleggPeriode.periode })
189192
.let { periode ->
@@ -246,6 +249,15 @@ internal object BeregnEndeligBidragService : BeregnService() {
246249
)
247250
}
248251
?: throw IllegalArgumentException("Delt bosted grunnlag mangler for periode $bruddPeriode")
252+
val søknadsbarnetBorHosBpGrunnlag = endeligBidragPeriodeGrunnlag.bostatusPeriodeGrunnlagListe
253+
.firstOrNull { it.bostatusPeriode.periode.inneholder(bruddPeriode) }
254+
?.let {
255+
SøknadsbarnetBorHosBpGrunnlag(
256+
referanse = it.referanse,
257+
søknadsbarnetBorHosBp = it.bostatusPeriode.bostatus == Bostatuskode.MED_FORELDER,
258+
)
259+
}
260+
?: throw IllegalArgumentException("Bostatus grunnlag mangler for periode $bruddPeriode")
249261
val barnetilleggBPBeregningGrunnlag = endeligBidragPeriodeGrunnlag.nettoBarnetilleggBPDelberegningPeriodeGrunnlagListe
250262
.firstOrNull { it.nettoBarnetilleggPeriode.periode.inneholder(bruddPeriode) }
251263
?.let {
@@ -289,6 +301,7 @@ internal object BeregnEndeligBidragService : BeregnService() {
289301
bpAndelUnderholdskostnadBeregningGrunnlag = bpAndelUnderholdskostnadBeregningGrunnlag,
290302
samværsfradragBeregningGrunnlag = samværsfradragBeregningGrunnlag,
291303
deltBostedBeregningGrunnlag = deltBostedBeregningGrunnlag,
304+
søknadsbarnetBorHosBpGrunnlag = søknadsbarnetBorHosBpGrunnlag,
292305
barnetilleggBPBeregningGrunnlag = barnetilleggBPBeregningGrunnlag,
293306
barnetilleggBMBeregningGrunnlag = barnetilleggBMBeregningGrunnlag,
294307
løpendeForskuddBeløp = løpendeForskuddBeløp,
@@ -370,6 +383,7 @@ internal object BeregnEndeligBidragService : BeregnService() {
370383
bidragJustertNedTil25ProsentAvInntekt = it.resultat.bidragJustertNedTil25ProsentAvInntekt,
371384
bidragJustertTilForskuddssats = it.resultat.bidragJustertTilForskuddssats,
372385
begrensetRevurderingUtført = it.resultat.begrensetRevurderingUtført,
386+
ikkeOmsorgForBarnet = it.resultat.ikkeOmsorgForBarnet,
373387
),
374388
),
375389
grunnlagsreferanseListe = (it.resultat.grunnlagsreferanseListe + mottattGrunnlag.søknadsbarnReferanse).sorted(),

0 commit comments

Comments
 (0)