From 46fba2db801e64bc57cd8a50537a3cedd0f69a22 Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Tue, 17 Dec 2024 10:52:16 +0100 Subject: [PATCH] Oppdater underholdskostnad api --- .../controller/v2/UnderholdController.kt | 14 ++-- .../database/datamodell/Underholdskostnad.kt | 2 +- .../behandling/dto/v2/underhold/Underhold.kt | 8 +++ .../behandling/transformers/Dtomapper.kt | 71 +++++++++++++------ 4 files changed, 63 insertions(+), 32 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt index 37ee224bf..07b0be793 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/UnderholdController.kt @@ -116,8 +116,8 @@ class UnderholdController( val oppdatertBarnetilsyn = underholdService.oppdatereStønadTilBarnetilsynManuelt(underholdskostnad, request) return OppdatereUnderholdResponse( stønadTilBarnetilsyn = oppdatertBarnetilsyn.tilStønadTilBarnetilsynDto(), - underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + underholdskostnad = dtomapper.run { behandling.tilBeregnetUnderholdskostnad().perioderForBarn(underholdskostnad.person) }, + beregnetUnderholdskostnader = dtomapper.run { behandling.tilBeregnetUnderholdskostnad() }, valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -156,10 +156,8 @@ class UnderholdController( val oppdatertFaktiskTilsynsutgift = underholdService.oppdatereFaktiskeTilsynsutgifter(underholdskostnad, request) return OppdatereUnderholdResponse( faktiskTilsynsutgift = dtomapper.tilFaktiskTilsynsutgiftDto(oppdatertFaktiskTilsynsutgift), - underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( - underholdskostnad.behandling, - ), + underholdskostnad = dtomapper.run { behandling.tilBeregnetUnderholdskostnad().first().perioder }, + beregnetUnderholdskostnader = dtomapper.run { behandling.tilBeregnetUnderholdskostnad() }, valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } @@ -197,8 +195,8 @@ class UnderholdController( val oppdatertTilleggsstønad = underholdService.oppdatereTilleggsstønad(underholdskostnad, request) return OppdatereUnderholdResponse( tilleggsstønad = dtomapper.tilTilleggsstønadDto(oppdatertTilleggsstønad), - underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn(underholdskostnad.behandling), + underholdskostnad = dtomapper.run { behandling.tilBeregnetUnderholdskostnad().first().perioder }, + beregnetUnderholdskostnader = dtomapper.run { behandling.tilBeregnetUnderholdskostnad() }, valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), ) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt index 6d2efdea7..61cd96ef3 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Underholdskostnad.kt @@ -46,7 +46,7 @@ open class Underholdskostnad( ) open val faktiskeTilsynsutgifter: MutableSet = mutableSetOf(), ) { - val barnetsRolleIBehandlingen get() = person.rolle.filter { behandling.id == it.behandling.id }.firstOrNull() + val barnetsRolleIBehandlingen get() = person.rolle.find { behandling.id == it.behandling.id } override fun toString(): String = "Underholdskostnad(id=$id, behandling=${behandling.id}, person=${person.id}, harTilsynsordning=$harTilsynsordning, faktiskeTilsynsutgifter=$faktiskeTilsynsutgifter, barnetilsyn=$barnetilsyn, tilleggsstønad=$tilleggsstønad)" diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt index 4e4eb8c5e..b593c8d53 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/underhold/Underhold.kt @@ -18,8 +18,10 @@ data class OppdatereUnderholdResponse( val stønadTilBarnetilsyn: StønadTilBarnetilsynDto? = null, val faktiskTilsynsutgift: FaktiskTilsynsutgiftDto? = null, val tilleggsstønad: TilleggsstønadDto? = null, + @Deprecated("Bruk beregnetUnderholdskostnader") val underholdskostnad: Set, val valideringsfeil: ValideringsfeilUnderhold? = null, + val beregnetUnderholdskostnader: Set, ) data class SletteUnderholdselement( @@ -50,6 +52,7 @@ data class UnderholdDto( val tilleggsstønad: Set = emptySet(), val underholdskostnad: Set, val begrunnelse: String? = null, + val beregnetUnderholdskostnad: Set, ) data class OppdatereUnderholdRequest( @@ -101,6 +104,11 @@ data class ValideringsfeilUnderhold( ) } +data class BeregnetUnderholdskostnad( + val gjelderBarn: PersoninfoDto, + val perioder: Set, +) + data class UnderholdskostnadDto( val periode: DatoperiodeDto, val forbruk: BigDecimal = BigDecimal.ZERO, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt index 57f594490..101ba1030 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -37,11 +37,11 @@ import no.nav.bidrag.behandling.dto.v2.boforhold.HusstandsmedlemDtoV2 import no.nav.bidrag.behandling.dto.v2.boforhold.OppdatereBoforholdResponse import no.nav.bidrag.behandling.dto.v2.boforhold.egetBarnErEnesteVoksenIHusstanden import no.nav.bidrag.behandling.dto.v2.gebyr.validerGebyr +import no.nav.bidrag.behandling.dto.v2.underhold.BeregnetUnderholdskostnad import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.FaktiskTilsynsutgiftDto import no.nav.bidrag.behandling.dto.v2.underhold.TilleggsstønadDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdDto -import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdskostnadDto import no.nav.bidrag.behandling.dto.v2.utgift.OppdatereUtgiftResponse import no.nav.bidrag.behandling.objectmapper import no.nav.bidrag.behandling.service.NotatService @@ -179,17 +179,19 @@ class Dtomapper( gjelderBarn = this.person.tilPersoninfoDto(rolleSøknadsbarn), faktiskTilsynsutgift = this.faktiskeTilsynsutgifter.sortedBy { it.fom }.tilFaktiskeTilsynsutgiftDtos(), stønadTilBarnetilsyn = - rolleSøknadsbarn?.let { - this.barnetilsyn - .sortedBy { it.fom } - .toSet() - .tilStønadTilBarnetilsynDtos() - } - ?: emptySet(), - tilleggsstønad = - rolleSøknadsbarn?.let { this.tilleggsstønad.sortedBy { it.fom }.tilTilleggsstønadDtos() } - ?: emptySet(), - underholdskostnad = rolleSøknadsbarn?.let { this.behandling.tilBeregnetUnderholdskostnad() } ?: emptySet(), + this.barnetilsyn + .sortedBy { it.fom } + .toSet() + .tilStønadTilBarnetilsynDtos(), + tilleggsstønad = this.tilleggsstønad.sortedBy { it.fom }.tilTilleggsstønadDtos(), + underholdskostnad = + this.behandling + .tilBeregnetUnderholdskostnad() + .perioderForBarn(person), + beregnetUnderholdskostnad = + this.behandling + .tilBeregnetUnderholdskostnad() + .perioderForBarn(person), begrunnelse = NotatService.henteUnderholdsnotat( this.behandling, @@ -198,18 +200,41 @@ class Dtomapper( ) } - private fun Behandling.tilBeregnetUnderholdskostnad(): Set { - // TODO: Beregning støtter per nå kun ett søknadsbarn. Skal støtte flere søknadsbarn i fremtiden. - val grunnlag = - vedtakGrunnlagMapper.byggGrunnlagForBeregning( - this, - this.søknadsbarn.first(), - ) + fun Set.perioderForBarn(person: Person) = + find { bu -> + bu.gjelderBarn.ident?.verdi == person.ident + }?.perioder ?: emptySet() + + fun Behandling.tilBeregnetUnderholdskostnad(): Set = + this.søknadsbarn + .map { + val grunnlag = + vedtakGrunnlagMapper.byggGrunnlagForBeregning( + this, + it, + ) + + val underholdBeregning = beregnBarnebidragApi.beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) + BeregnetUnderholdskostnad( + it.tilPersoninfoDto(), + underholdBeregning + .finnAlleDelberegningUnderholdskostnad() + .tilUnderholdskostnadDto(underholdBeregning), + ) + }.toSet() + + private fun Rolle.tilPersoninfoDto(): PersoninfoDto { + val personinfo = + this.ident?.let { vedtakGrunnlagMapper.mapper.personService.hentPerson(it) } - val underholdBeregning = beregnBarnebidragApi.beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) - return underholdBeregning - .finnAlleDelberegningUnderholdskostnad() - .tilUnderholdskostnadDto(underholdBeregning) + return PersoninfoDto( + id = this.id, + ident = ident?.let { Personident(it) } ?: this.ident?.let { Personident(it) }, + navn = personinfo?.navn ?: this.navn, + fødselsdato = personinfo?.fødselsdato ?: this.fødselsdato, + kilde = ident?.let { Kilde.OFFENTLIG } ?: Kilde.MANUELL, + medIBehandlingen = ident != null, + ) } private fun Person.tilPersoninfoDto(rolle: Rolle?): PersoninfoDto {