Skip to content

Commit

Permalink
Feilfiks fatte vedtak særbidrag vedtak og visning av historiske innte…
Browse files Browse the repository at this point in the history
…kter (#515)
  • Loading branch information
ugur93 authored Oct 4, 2024
1 parent ac1eab0 commit b59816a
Show file tree
Hide file tree
Showing 23 changed files with 317 additions and 91 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
<properties>
<java.version>21</java.version>
<kotlin.version>2.0.20</kotlin.version>
<bidrag-felles.version>2024.10.02.070120</bidrag-felles.version>
<bidrag-beregn-felles.version>2024.10.02.074523</bidrag-beregn-felles.version>
<bidrag-felles.version>2024.10.04.095225</bidrag-felles.version>
<bidrag-beregn-felles.version>2024.10.03.143256</bidrag-beregn-felles.version>
<h2.version>2.3.232</h2.version>
<logback-encoder.version>8.0</logback-encoder.version>
<token-support.version>3.2.0</token-support.version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package no.nav.bidrag.behandling.consumer

import no.nav.bidrag.behandling.config.CacheConfig.Companion.BBM_BEREGNING_CACHE
import no.nav.bidrag.commons.cache.BrukerCacheable
import no.nav.bidrag.commons.web.client.AbstractRestClient
import no.nav.bidrag.transport.behandling.beregning.felles.BidragBeregningRequestDto
import no.nav.bidrag.transport.behandling.beregning.felles.BidragBeregningResponsDto
Expand All @@ -22,12 +20,12 @@ class BidragBBMConsumer(
private val bidragBBMUri
get() = UriComponentsBuilder.fromUri(bidragBBMurl).pathSegment("api", "beregning")

// @BrukerCacheable(BBM_BEREGNING_CACHE)
@Retryable(
value = [Exception::class],
maxAttempts = 3,
backoff = Backoff(delay = 200, maxDelay = 1000, multiplier = 2.0),
)
@BrukerCacheable(BBM_BEREGNING_CACHE)
fun hentBeregning(request: BidragBeregningRequestDto): BidragBeregningResponsDto =
postForNonNullEntity(
bidragBBMUri.build().toUri(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package no.nav.bidrag.behandling.consumer

import no.nav.bidrag.behandling.config.CacheConfig.Companion.STØNAD_LØPENDE_BIDRAG_CACHE
import no.nav.bidrag.commons.cache.BrukerCacheable
import no.nav.bidrag.commons.web.client.AbstractRestClient
import no.nav.bidrag.transport.behandling.stonad.request.LøpendeBidragssakerRequest
import no.nav.bidrag.transport.behandling.stonad.response.LøpendeBidragssakerResponse
Expand All @@ -22,12 +20,12 @@ class BidragStønadConsumer(
private val bidragsStønadUri
get() = UriComponentsBuilder.fromUri(bidragStønadUrl)

// @BrukerCacheable(STØNAD_LØPENDE_BIDRAG_CACHE)
@Retryable(
value = [Exception::class],
maxAttempts = 3,
backoff = Backoff(delay = 200, maxDelay = 1000, multiplier = 2.0),
)
@BrukerCacheable(STØNAD_LØPENDE_BIDRAG_CACHE)
fun hentLøpendeBidrag(request: LøpendeBidragssakerRequest): LøpendeBidragssakerResponse =
postForNonNullEntity(
bidragsStønadUri.pathSegment("hent-lopende-bidragssaker-for-skyldner").build().toUri(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package no.nav.bidrag.behandling.consumer

import no.nav.bidrag.behandling.config.CacheConfig.Companion.VEDTAK_FOR_STØNAD_CACHE
import no.nav.bidrag.commons.cache.BrukerCacheable
import no.nav.bidrag.commons.web.client.AbstractRestClient
import no.nav.bidrag.transport.behandling.vedtak.request.HentVedtakForStønadRequest
import no.nav.bidrag.transport.behandling.vedtak.request.OpprettVedtakRequestDto
Expand Down Expand Up @@ -36,12 +34,12 @@ class BidragVedtakConsumer(
bidragVedtakUri.pathSegment(vedtakId.toString()).build().toUri(),
)

// @BrukerCacheable(VEDTAK_FOR_STØNAD_CACHE)
@Retryable(
value = [Exception::class],
maxAttempts = 3,
backoff = Backoff(delay = 200, maxDelay = 1000, multiplier = 2.0),
)
@BrukerCacheable(VEDTAK_FOR_STØNAD_CACHE)
fun hentVedtakForStønad(request: HentVedtakForStønadRequest): HentVedtakForStønadResponse =
postForNonNullEntity(
bidragVedtakUri.pathSegment("hent-vedtak").build().toUri(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto
import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto
import no.nav.bidrag.domene.enums.beregning.Resultatkode
import no.nav.bidrag.domene.tid.ÅrMånedsperiode
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndelSærbidrag
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndel
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningUtgift
import java.math.BigDecimal

data class ResultatSærbidragsberegningDto(
val periode: ÅrMånedsperiode,
val bpsAndel: DelberegningBidragspliktigesAndelSærbidrag? = null,
val bpsAndel: DelberegningBidragspliktigesAndel? = null,
val beregning: UtgiftBeregningDto? = null,
val inntekter: ResultatSærbidragsberegningInntekterDto? = null,
val utgiftsposter: List<UtgiftspostDto> = emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import no.nav.bidrag.behandling.transformers.behandling.hentBeregnetInntekterFor
import no.nav.bidrag.behandling.transformers.behandling.notatTittel
import no.nav.bidrag.behandling.transformers.behandling.tilReferanseId
import no.nav.bidrag.behandling.transformers.ekskluderYtelserFørVirkningstidspunkt
import no.nav.bidrag.behandling.transformers.erHistorisk
import no.nav.bidrag.behandling.transformers.inntekt.bestemOpprinneligTomVisningsverdi
import no.nav.bidrag.behandling.transformers.nærmesteHeltall
import no.nav.bidrag.behandling.transformers.sorterEtterDato
Expand Down Expand Up @@ -469,6 +470,7 @@ private fun Inntekt.tilNotatInntektDto() =
?.let { gjelderBarn ->
behandling?.roller?.find { it.ident == gjelderBarn }
}?.tilNotatRolle(),
historisk = erHistorisk(behandling!!.inntekter),
inntektsposter =
inntektsposter
.map {
Expand Down Expand Up @@ -509,7 +511,7 @@ private fun Behandling.hentInntekterForIdent(
},
årsinntekter =
inntekter
.årsinntekterSortert(!filtrerBareOffentlige)
.årsinntekterSortert(!filtrerBareOffentlige, true)
.inntekterForIdent(ident)
.ekskluderYtelserFørVirkningstidspunkt()
.filtrerKilde(filtrerBareOffentlige)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import no.nav.bidrag.transport.behandling.beregning.særbidrag.BeregnetSærbidra
import no.nav.bidrag.transport.behandling.felles.grunnlag.BostatusPeriode
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBarnIHusstand
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragsevne
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndelSærbidrag
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndel
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningSumInntekt
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningUtgift
import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningVoksneIHustand
Expand Down Expand Up @@ -173,16 +173,16 @@ fun List<GrunnlagDto>.finnAntallBarnIHusstanden(grunnlagsreferanseListe: List<Gr

fun List<GrunnlagDto>.finnDelberegningBidragspliktigesAndel(
grunnlagsreferanseListe: List<Grunnlagsreferanse>,
): DelberegningBidragspliktigesAndelSærbidrag? {
): DelberegningBidragspliktigesAndel? {
val sluttberegning = finnSluttberegningIReferanser(grunnlagsreferanseListe) ?: return null
val delberegningBidragspliktigesAndel =
find {
it.type == Grunnlagstype.DELBEREGNING_BIDRAGSPLIKTIGES_ANDEL_SÆRBIDRAG &&
it.type == Grunnlagstype.DELBEREGNING_BIDRAGSPLIKTIGES_ANDEL &&
sluttberegning.grunnlagsreferanseListe.contains(
it.referanse,
)
} ?: return null
return delberegningBidragspliktigesAndel.innholdTilObjekt<DelberegningBidragspliktigesAndelSærbidrag>()
return delberegningBidragspliktigesAndel.innholdTilObjekt<DelberegningBidragspliktigesAndel>()
}

fun List<GrunnlagDto>.finnEnesteVoksenIHusstandenErEgetBarn(grunnlagsreferanseListe: List<Grunnlagsreferanse>): Boolean? {
Expand Down Expand Up @@ -215,7 +215,7 @@ fun List<GrunnlagDto>.finnDelberegningUtgift(grunnlagsreferanseListe: List<Grunn
val sluttberegning = finnSluttberegningIReferanser(grunnlagsreferanseListe) ?: return null
val delberegningBidragspliktigesAndelReferanser =
find {
it.type == Grunnlagstype.DELBEREGNING_BIDRAGSPLIKTIGES_ANDEL_SÆRBIDRAG &&
it.type == Grunnlagstype.DELBEREGNING_BIDRAGSPLIKTIGES_ANDEL &&
sluttberegning.grunnlagsreferanseListe.contains(
it.referanse,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import no.nav.bidrag.behandling.dto.v2.behandling.SivilstandIkkeAktivGrunnlagDto
import no.nav.bidrag.behandling.transformers.ainntekt12Og3Måneder
import no.nav.bidrag.behandling.transformers.ainntekt12Og3MånederFraOpprinneligVedtakstidspunkt
import no.nav.bidrag.behandling.transformers.eksplisitteYtelser
import no.nav.bidrag.behandling.transformers.filtrerUtHistoriskeInntekter
import no.nav.bidrag.behandling.transformers.inntekt.tilIkkeAktivInntektDto
import no.nav.bidrag.behandling.transformers.inntekt.tilInntektspostEndring
import no.nav.bidrag.behandling.transformers.nærmesteHeltall
Expand Down Expand Up @@ -272,9 +271,9 @@ fun List<Grunnlag>.hentEndringerInntekter(
inntekter: Set<Inntekt>,
type: Grunnlagsdatatype,
): Set<IkkeAktivInntektDto> {
val inntekterRolle = inntekter.filter { it.ident == rolle.ident }.filtrerUtHistoriskeInntekter()
val inntekterRolle = inntekter.filter { it.ident == rolle.ident }

val oppdatertGrunnlag = henteBearbeidaInntekterForType(type, rolle.ident!!)?.filtrerUtHistoriskeInntekter()
val oppdatertGrunnlag = henteBearbeidaInntekterForType(type, rolle.ident!!)
val innhentetTidspunkt = find { it.type == type && it.erBearbeidet }?.innhentet ?: LocalDateTime.now()
val oppdaterteEllerNyeInntekter =
oppdatertGrunnlag
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ val summertAinntektstyper =
Inntektsrapportering.AINNTEKT,
Inntektsrapportering.AINNTEKT_BEREGNET_3MND,
Inntektsrapportering.AINNTEKT_BEREGNET_12MND,
Inntektsrapportering.AINNTEKT_BEREGNET_12MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
Inntektsrapportering.AINNTEKT_BEREGNET_3MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
)

val summertYtelsetyper =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,17 @@ import no.nav.bidrag.domene.util.trimToNull
import no.nav.bidrag.transport.behandling.felles.grunnlag.BeregnetInntekt
import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto
import no.nav.bidrag.transport.behandling.felles.grunnlag.Grunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.InnhentetHusstandsmedlem
import no.nav.bidrag.transport.behandling.felles.grunnlag.hentPersonMedReferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettAinntektGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettBarnetilleggGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettInnhentetHusstandsmedlemGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettKontantstøtteGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettSkattegrunnlagGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettSmåbarnstilleggGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettUtvidetbarnetrygGrunnlagsreferanse
import no.nav.bidrag.transport.behandling.felles.grunnlag.personIdent
import no.nav.bidrag.transport.behandling.grunnlag.response.ArbeidsforholdGrunnlagDto
import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilleggGrunnlagDto
import no.nav.bidrag.transport.behandling.grunnlag.response.BarnetilsynGrunnlagDto
Expand All @@ -37,6 +41,7 @@ import no.nav.bidrag.transport.behandling.grunnlag.response.SmåbarnstilleggGrun
import no.nav.bidrag.transport.behandling.grunnlag.response.UtvidetBarnetrygdGrunnlagDto
import no.nav.bidrag.transport.behandling.inntekt.response.SummertMånedsinntekt
import no.nav.bidrag.transport.behandling.inntekt.response.SummertÅrsinntekt
import java.time.LocalDateTime

fun List<Grunnlag>.tilInnhentetArbeidsforhold(personobjekter: Set<GrunnlagDto>): Set<GrunnlagDto> =
filter { it.type == Grunnlagsdatatype.ARBEIDSFORHOLD }
Expand Down Expand Up @@ -123,7 +128,37 @@ fun List<Grunnlag>.tilInnhentetHusstandsmedlemmer(personobjekter: Set<GrunnlagDt
),
)
}?.let { setOf(it) } ?: emptySet()
return innhentetHusstandsmedlemGrunnlagListe + personobjekterInnhentetHusstandsmedlem + innhentetAndreVoksneIHusstandenGrunnlagListe

return innhentetHusstandsmedlemGrunnlagListe + personobjekterInnhentetHusstandsmedlem + innhentetAndreVoksneIHusstandenGrunnlagListe +
opprettInnhentetHusstandsmedlemGrunnlagForSøknadsbarnHvisMangler(innhentetHusstandsmedlemGrunnlagListe, personobjekter)
}

fun List<Grunnlag>.opprettInnhentetHusstandsmedlemGrunnlagForSøknadsbarnHvisMangler(
innhentetHusstandsmedlemGrunnlagListe: Set<GrunnlagDto>,
personobjekter: Set<GrunnlagDto>,
): List<GrunnlagDto> {
val behandling = firstOrNull()?.behandling ?: return emptyList()
val søknadsbarnSomManglerInnhentetGrunnlag =
behandling.søknadsbarn.filter { sb ->
innhentetHusstandsmedlemGrunnlagListe.none {
val barnReferanse = it.innholdTilObjekt<InnhentetHusstandsmedlem>().grunnlag.gjelderPerson
personobjekter.hentPersonMedReferanse(barnReferanse)?.personIdent == sb.ident
}
}
return søknadsbarnSomManglerInnhentetGrunnlag.map {
RelatertPersonGrunnlagDto(
fødselsdato = it.fødselsdato,
gjelderPersonId = it.ident,
partPersonId = behandling.rolleGrunnlagSkalHentesFor!!.ident,
navn = it.navn,
relasjon = Familierelasjon.BARN,
borISammeHusstandDtoListe = emptyList(),
).tilGrunnlagsobjekt(
LocalDateTime.now(),
personobjekter.hentPersonNyesteIdent(behandling.rolleGrunnlagSkalHentesFor!!.ident)!!.referanse,
personobjekter.hentPersonNyesteIdent(it.ident)!!.referanse,
)
}
}

fun List<Grunnlag>.tilBeregnetInntekt(personobjekter: Set<GrunnlagDto>): Set<GrunnlagDto> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import no.nav.bidrag.behandling.transformers.erSærbidrag
import no.nav.bidrag.behandling.transformers.sorter
import no.nav.bidrag.behandling.transformers.sorterBeregnetUtgifter
import no.nav.bidrag.behandling.transformers.validerUtgiftspost
import no.nav.bidrag.behandling.transformers.vedtak.ifTrue
import no.nav.bidrag.domene.enums.særbidrag.Særbidragskategori
import no.nav.bidrag.domene.enums.særbidrag.Utgiftstype
import org.springframework.http.HttpStatus
Expand All @@ -33,16 +32,12 @@ import java.math.BigDecimal
import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType as Notattype

val kategorierSomKreverType = listOf(Særbidragskategori.ANNET, Særbidragskategori.KONFIRMASJON)
val Behandling.kanInneholdeUtgiftBetaltAvBp get() = særbidragKategori == Særbidragskategori.KONFIRMASJON
val Utgift.totalGodkjentBeløpBp
get() =
behandling.kanInneholdeUtgiftBetaltAvBp.ifTrue {
utgiftsposter.filter { it.betaltAvBp }.sumOf { it.godkjentBeløp }
}
get() = utgiftsposter.filter { it.betaltAvBp }.sumOf { it.godkjentBeløp }
val Utgift.totalGodkjentBeløp get() = utgiftsposter.sumOf { it.godkjentBeløp }
val Utgift.totalKravbeløp get() = utgiftsposter.sumOf { it.kravbeløp }
val Utgift.totalBeløpBetaltAvBp
get() = utgiftsposter.filter { it.betaltAvBp }.sumOf { it.godkjentBeløp } + beløpDirekteBetaltAvBp
get() = totalGodkjentBeløpBp + beløpDirekteBetaltAvBp

fun Behandling.tilSærbidragKategoriDto() =
SærbidragKategoriDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,28 +322,33 @@ private fun List<GrunnlagDto>.mapInntekter(
val erForskuddOmgjøring =
behandling.soknadFra == SøktAvType.NAV_BIDRAG && behandling.vedtakstype == Vedtakstype.ENDRING
if (!lesemodus && !erForskuddOmgjøring) {
inntekter.find { it.type == Inntektsrapportering.AINNTEKT_BEREGNET_12MND }?.let { originalInntekt ->
originalInntekt
.copy(
type = Inntektsrapportering.AINNTEKT_BEREGNET_12MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
).run {
inntekter.add(this)
originalInntekt.taMed = false
originalInntekt.datoFom = null
originalInntekt.datoTom = null
}
}

inntekter.find { it.type == Inntektsrapportering.AINNTEKT_BEREGNET_3MND }?.let { originalInntekt ->
originalInntekt
.copy(
type = Inntektsrapportering.AINNTEKT_BEREGNET_3MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
).run {
inntekter.add(this)
originalInntekt.taMed = false
originalInntekt.datoFom = null
originalInntekt.datoTom = null
inntekter.groupBy { it.ident }.forEach { (_, inntekterRolle) ->
inntekterRolle
.find {
it.type ==
Inntektsrapportering.AINNTEKT_BEREGNET_12MND
}?.let { originalInntekt ->
originalInntekt
.copy(
type = Inntektsrapportering.AINNTEKT_BEREGNET_12MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
).run {
inntekter.add(this)
originalInntekt.taMed = false
originalInntekt.datoFom = null
originalInntekt.datoTom = null
}
}
inntekterRolle.find { it.type == Inntektsrapportering.AINNTEKT_BEREGNET_3MND }?.let { originalInntekt ->
originalInntekt
.copy(
type = Inntektsrapportering.AINNTEKT_BEREGNET_3MND_FRA_OPPRINNELIG_VEDTAKSTIDSPUNKT,
).run {
inntekter.add(this)
originalInntekt.taMed = false
originalInntekt.datoFom = null
originalInntekt.datoTom = null
}
}
}
}
val inntekterBeregnet =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ class BehandlingBeregnControllerTest : KontrollerTestRunner() {
it.delberegningUtgift!!.sumGodkjent shouldBe BigDecimal(2500)
it.beregning!!.totalKravbeløp shouldBe BigDecimal(3000)
it.bpsAndel!!.andelBeløp shouldBe BigDecimal(2083)
it.bpsAndel.andelFaktor.round(MathContext(3)) shouldBe BigDecimal(0.8333).round(MathContext(3))
it.bpsAndel.endeligAndelFaktor.round(MathContext(3)) shouldBe BigDecimal(0.8333).round(MathContext(3))
}
}

Expand Down
Loading

0 comments on commit b59816a

Please sign in to comment.