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 4e71e1ac..ac31f638 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 @@ -21,6 +21,7 @@ import no.nav.bidrag.behandling.dto.v2.underhold.Underholdselement import no.nav.bidrag.behandling.service.UnderholdService import no.nav.bidrag.behandling.transformers.Dtomapper import no.nav.bidrag.behandling.transformers.underhold.henteOgValidereUnderholdskostnad +import no.nav.bidrag.behandling.transformers.underhold.validerePerioder import no.nav.bidrag.commons.util.secureLogger import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation.DeleteMapping @@ -145,7 +146,15 @@ class UnderholdController( val underholdskostnad = henteOgValidereUnderholdskostnad(behandling, underholdsid) - return underholdService.oppdatereFaktiskeTilsynsutgifter(underholdskostnad, request) + val oppdatertFaktiskTilsynsutgift = underholdService.oppdatereFaktiskeTilsynsutgifter(underholdskostnad, request) + return OppdatereUnderholdResponse( + faktiskTilsynsutgift = dtomapper.tilFaktiskTilsynsutgiftDto(oppdatertFaktiskTilsynsutgift), + underholdskostnad = + dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( + underholdskostnad.behandling, + ), + valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), + ) } @ResponseStatus(HttpStatus.CREATED) 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 dd1d4c76..716e0869 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 @@ -115,19 +115,21 @@ data class UnderholdskostnadDto( val tilsynsutgifterBarn: List = emptyList(), val sjablonMaksTilsynsutgift: BigDecimal, val sjablonMaksFradrag: BigDecimal, - val sjablonAntallBarn: Int, - val skattAlminneligInntektFaktor: BigDecimal, + val antallBarn: Int, + val skattesatsFaktor: BigDecimal, val totalTilsynsutgift: BigDecimal, val sumTilsynsutgifter: BigDecimal, val endeligBeløp: BigDecimal, - val faktiskBeløp: BigDecimal, + val bruttoBeløp: BigDecimal, val andelBeløp: BigDecimal, val nettoBeløp: BigDecimal, val erBegrensetAvMaksTilsyn: Boolean, val fordelingFaktor: BigDecimal, - val skattefradrag: BigDecimal, + val skattefradragPerBarn: BigDecimal, val maksFradragAndel: BigDecimal, - val beløpTrukkeFraSkattefradrag: BigDecimal, + val skattefradrag: BigDecimal, + val skattMaksFradrag: BigDecimal, + val skattTotalTilsynsutgift: BigDecimal, ) data class TilsynsutgiftBarn( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt index 9a9ef96a..264be591 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/UnderholdService.kt @@ -291,7 +291,7 @@ class UnderholdService( fun oppdatereFaktiskeTilsynsutgifter( underholdskostnad: Underholdskostnad, request: OppdatereFaktiskTilsynsutgiftRequest, - ): OppdatereUnderholdResponse { + ): FaktiskTilsynsutgift { request.validere(underholdskostnad) val oppdatertFaktiskTilsynsutgift = @@ -322,14 +322,7 @@ class UnderholdService( .sortedBy { it.id } .last() } - return OppdatereUnderholdResponse( - faktiskTilsynsutgift = dtomapper.tilFaktiskTilsynsutgiftDto(oppdatertFaktiskTilsynsutgift), - underholdskostnad = - dtomapper.tilUnderholdskostnadsperioderForBehandlingMedKunEttSøknadsbarn( - underholdskostnad.behandling, - ), - valideringsfeil = underholdskostnad.barnetilsyn.validerePerioder(), - ) + return oppdatertFaktiskTilsynsutgift } @Transactional diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt index ee3ff929..64c80c87 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt @@ -84,6 +84,7 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.personIdent import no.nav.bidrag.transport.behandling.felles.grunnlag.tilGrunnlagstype import no.nav.bidrag.transport.felles.ifTrue import java.math.BigDecimal +import java.math.MathContext import java.math.RoundingMode import java.time.LocalDate @@ -514,27 +515,31 @@ fun List.tilUnderholdskostnadDetaljer( val sjablonMaksFradragBeløp = sjablonMaksfradrag.firstOrNull()?.innhold?.maksBeløpFradrag ?: BigDecimal.ZERO val antallBarn = nettoTilsyn.innhold.tilsynsutgiftBarnListe.size val maksfradragAndel = sjablonMaksFradragBeløp.divide(antallBarn.toBigDecimal(), 10, RoundingMode.HALF_UP) + val skattesatsFaktor = sjablonSkattesats?.innhold?.verdi?.divide(BigDecimal(100), 10, RoundingMode.HALF_UP) ?: BigDecimal.ZERO + val bruttoMaksFradrag = sjablonMaksFradragBeløp.multiply(skattesatsFaktor, MathContext(10, RoundingMode.HALF_UP)) + val bruttoTotalTilsynsutgift = nettoTilsyn.innhold.totalTilsynsutgift.multiply(skattesatsFaktor, MathContext(10, RoundingMode.HALF_UP)) return Beregningsdetaljer( - erBegrensetAvMaksTilsyn = erBegrensetAvMaksTilsyn, + tilsynsutgifterBarn = + nettoTilsyn.innhold.tilsynsutgiftBarnListe.sortedBy { it.gjelderBarn }.map { fu -> + tilsynsutgifterBarn(grunnlagsreferanseListe, fu) + }, endeligBeløp = søknadsbarnEndeligBeløp, - faktiskBeløp = søknadsbarnFaktiskBeløp, - andelBeløp = nettoTilsyn.innhold.andelTilsynsutgiftBeløp, - nettoBeløp = nettoTilsyn.innhold.nettoTilsynsutgift, + bruttoBeløp = søknadsbarnFaktiskBeløp, + erBegrensetAvMaksTilsyn = erBegrensetAvMaksTilsyn, sjablonMaksTilsynsutgift = maksTilsynBeløp, totalTilsynsutgift = nettoTilsyn.innhold.totalTilsynsutgift, sumTilsynsutgifter = sumTilsynsutgifter, fordelingFaktor = nettoTilsyn.innhold.andelTilsynsutgiftFaktor, - skattefradrag = nettoTilsyn.innhold.skattefradrag, + skattefradragPerBarn = nettoTilsyn.innhold.skattefradrag, maksFradragAndel = maksfradragAndel, - beløpTrukkeFraSkattefradrag = minOf(maksfradragAndel, nettoTilsyn.innhold.andelTilsynsutgiftBeløp), sjablonMaksFradrag = sjablonMaksfradrag.firstOrNull()?.innhold?.maksBeløpFradrag ?: BigDecimal.ZERO, - skattAlminneligInntektFaktor = - sjablonSkattesats?.innhold?.verdi?.divide(BigDecimal(100), 10, RoundingMode.HALF_UP) ?: BigDecimal.ZERO, - sjablonAntallBarn = antallBarn, - tilsynsutgifterBarn = - nettoTilsyn.innhold.tilsynsutgiftBarnListe.sortedBy { it.gjelderBarn }.map { fu -> - tilsynsutgifterBarn(grunnlagsreferanseListe, fu) - }, + skattTotalTilsynsutgift = bruttoTotalTilsynsutgift, + skattMaksFradrag = bruttoMaksFradrag, + skattefradrag = minOf(bruttoTotalTilsynsutgift, bruttoMaksFradrag), + skattesatsFaktor = skattesatsFaktor, + antallBarn = antallBarn, + andelBeløp = nettoTilsyn.innhold.andelTilsynsutgiftBeløp, + nettoBeløp = nettoTilsyn.innhold.nettoTilsynsutgift, ) }