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 1eb9336b..5f4138c2 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 @@ -113,14 +113,20 @@ data class UnderholdskostnadDto( ) { data class Beregningsdetaljer( val tilsynsutgifterBarn: List = emptyList(), + val sjablonMaksTilsynsutgift: BigDecimal, val totalTilsynsutgift: BigDecimal, + val sumTilsynsutgifter: BigDecimal, val endeligBeløp: BigDecimal, val faktiskBeløp: BigDecimal, + val nettoBeløp: BigDecimal, + val erBegrensetAvMaksTilsyn: Boolean, val fordelingFaktor: BigDecimal, val skattefradrag: BigDecimal, ) data class TilsynsutgiftBarn( + val gjelderBarn: PersoninfoDto, + val totalTilsynsutgift: BigDecimal, val beløp: BigDecimal, val kostpenger: BigDecimal? = null, val tilleggsstønad: BigDecimal? = null, 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 0858dba5..c54dfba9 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt @@ -15,10 +15,13 @@ import no.nav.bidrag.behandling.dto.v1.beregning.ResultatBidragsberegningBarnDto import no.nav.bidrag.behandling.dto.v1.beregning.ResultatForskuddsberegningBarn import no.nav.bidrag.behandling.dto.v1.beregning.ResultatSærbidragsberegningDto import no.nav.bidrag.behandling.dto.v2.behandling.GebyrRolleDto +import no.nav.bidrag.behandling.dto.v2.behandling.PersoninfoDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdskostnadDto +import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdskostnadDto.Beregningsdetaljer +import no.nav.bidrag.behandling.service.hentPersonVisningsnavn import no.nav.bidrag.behandling.transformers.behandling.tilDto import no.nav.bidrag.behandling.transformers.utgift.tilBeregningDto import no.nav.bidrag.behandling.transformers.utgift.tilDto @@ -47,24 +50,32 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragsevn import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesAndel import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningBidragspliktigesBeregnedeTotalbidrag import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningNettoBarnetillegg +import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningNettoTilsynsutgift import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningSamværsfradrag import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningSamværsklasse import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningSumInntekt +import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningTilleggsstønad import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningUnderholdskostnad import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningUtgift import no.nav.bidrag.transport.behandling.felles.grunnlag.DelberegningVoksneIHusstand +import no.nav.bidrag.transport.behandling.felles.grunnlag.FaktiskUtgiftPeriode 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.InnholdMedReferanse +import no.nav.bidrag.transport.behandling.felles.grunnlag.Person import no.nav.bidrag.transport.behandling.felles.grunnlag.SamværsklassePeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.SivilstandPeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.SjablonBidragsevnePeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.SjablonMaksTilsynPeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.SjablonSjablontallPeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.SluttberegningBarnebidrag +import no.nav.bidrag.transport.behandling.felles.grunnlag.TilsynsutgiftBarn import no.nav.bidrag.transport.behandling.felles.grunnlag.bidragspliktig -import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerBasertPåEgenReferanse +import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerOgKonverterBasertPåEgenReferanse import no.nav.bidrag.transport.behandling.felles.grunnlag.finnGrunnlagSomErReferertAv import no.nav.bidrag.transport.behandling.felles.grunnlag.finnGrunnlagSomErReferertFraGrunnlagsreferanseListe import no.nav.bidrag.transport.behandling.felles.grunnlag.finnOgKonverterGrunnlagSomErReferertAv +import no.nav.bidrag.transport.behandling.felles.grunnlag.finnOgKonverterGrunnlagSomErReferertFraGrunnlagsreferanseListe import no.nav.bidrag.transport.behandling.felles.grunnlag.hentAllePersoner import no.nav.bidrag.transport.behandling.felles.grunnlag.hentPersonMedReferanse import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt @@ -72,6 +83,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.RoundingMode import java.time.LocalDate fun BeregnGebyrResultat.tilDto(rolle: Rolle): GebyrRolleDto { @@ -433,9 +445,10 @@ fun List.finnDelberegningSamværsfradrag( ) } -fun List.tilUnderholdskostnadDto() = +fun List>.tilUnderholdskostnadDto(underholdBeregning: List) = this - .map { + .map { delberegning -> + val it = delberegning.innhold UnderholdskostnadDto( stønadTilBarnetilsyn = it.barnetilsynMedStønad ?: BigDecimal.ZERO, tilsynsutgifter = it.nettoTilsynsutgift ?: BigDecimal.ZERO, @@ -450,16 +463,87 @@ fun List.tilUnderholdskostnadDto() = barnetrygd = it.barnetrygd, boutgifter = it.boutgift, total = it.underholdskostnad, + beregningsdetaljer = + underholdBeregning.tilUnderholdskostnadDetaljer( + delberegning.grunnlag.grunnlagsreferanseListe, + delberegning.gjelderBarnReferanse, + ), ) }.toSet() -fun List.finnAlleDelberegningUnderholdskostnad(): List = +fun List.tilUnderholdskostnadDetaljer( + grunnlagsreferanseListe: List, + gjelderBarnReferanse: String?, +): Beregningsdetaljer? { + val nettoTilsyn = + finnOgKonverterGrunnlagSomErReferertFraGrunnlagsreferanseListe( + Grunnlagstype.DELBEREGNING_NETTO_TILSYNSUTGIFT, + grunnlagsreferanseListe, + ).firstOrNull() ?: return null + + val sjablonMaksTilsyn = + finnOgKonverterGrunnlagSomErReferertFraGrunnlagsreferanseListe( + Grunnlagstype.SJABLON_MAKS_TILSYN, + grunnlagsreferanseListe, + ) + val maksTilsynBeløp = sjablonMaksTilsyn.firstOrNull()?.innhold?.maksBeløpTilsyn ?: BigDecimal.ZERO + val søknadsbarnEndeligBeløp = + nettoTilsyn.innhold.tilsynsutgiftBarnListe + .find { it.gjelderBarn == gjelderBarnReferanse } + ?.endeligSumTilsynsutgifter + ?: BigDecimal.ZERO + val sumTilsynsutgifter = nettoTilsyn.innhold.tilsynsutgiftBarnListe.sumOf { it.sumTilsynsutgifter } + val erBegrensetAvMaksTilsyn = + nettoTilsyn.innhold.totalTilsynsutgift.setScale(0, RoundingMode.HALF_UP) != sumTilsynsutgifter.setScale(0, RoundingMode.HALF_UP) + return Beregningsdetaljer( + erBegrensetAvMaksTilsyn = erBegrensetAvMaksTilsyn, + endeligBeløp = søknadsbarnEndeligBeløp, + sjablonMaksTilsynsutgift = maksTilsynBeløp, + faktiskBeløp = nettoTilsyn.innhold.andelTilsynsutgiftBeløp, + nettoBeløp = nettoTilsyn.innhold.nettoTilsynsutgift, + totalTilsynsutgift = nettoTilsyn.innhold.totalTilsynsutgift, + sumTilsynsutgifter = sumTilsynsutgifter, + fordelingFaktor = nettoTilsyn.innhold.andelTilsynsutgiftFaktor, + skattefradrag = nettoTilsyn.innhold.skattefradrag, + tilsynsutgifterBarn = + nettoTilsyn.innhold.tilsynsutgiftBarnListe.sortedBy { it.gjelderBarn }.map { fu -> + tilsynsutgifterBarn(grunnlagsreferanseListe, fu) + }, + ) +} + +fun List.tilsynsutgifterBarn( + grunnlagsreferanseListe: List, + tilsynsutgiftBarn: TilsynsutgiftBarn, +): UnderholdskostnadDto.TilsynsutgiftBarn { + val faktiskUtgiftPeriode = + finnOgKonverterGrunnlagSomErReferertFraGrunnlagsreferanseListe( + Grunnlagstype.FAKTISK_UTGIFT_PERIODE, + grunnlagsreferanseListe, + ).find { it.gjelderBarnReferanse == tilsynsutgiftBarn.gjelderBarn }!! + + val delberegningTilleggsstønad = + finnOgKonverterGrunnlagSomErReferertFraGrunnlagsreferanseListe( + Grunnlagstype.DELBEREGNING_TILLEGGSSTØNAD, + grunnlagsreferanseListe, + ).find { it.gjelderBarnReferanse == tilsynsutgiftBarn.gjelderBarn } + val person = hentPersonMedReferanse(tilsynsutgiftBarn.gjelderBarn)?.innholdTilObjekt() + val navn = if (person?.navn.isNullOrEmpty()) hentPersonVisningsnavn(person?.ident?.verdi) else person?.navn + return UnderholdskostnadDto.TilsynsutgiftBarn( + gjelderBarn = PersoninfoDto(1, person?.ident, navn), + totalTilsynsutgift = faktiskUtgiftPeriode.innhold.faktiskUtgiftBeløp, + beløp = tilsynsutgiftBarn.sumTilsynsutgifter, + kostpenger = faktiskUtgiftPeriode.innhold.kostpengerBeløp, + tilleggsstønad = delberegningTilleggsstønad?.innhold?.beregnetBeløp, + ) +} + +fun List.finnAlleDelberegningUnderholdskostnad(): List> = this - .filtrerBasertPåEgenReferanse( + .filtrerOgKonverterBasertPåEgenReferanse( Grunnlagstype.DELBEREGNING_UNDERHOLDSKOSTNAD, - ).innholdTilObjekt() - .sortedBy { - it.periode.fom + ).sortedBy { + it.innhold.periode.fom } fun List.finnBarnetillegg( 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 f1ce259a..31a92d85 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -206,10 +206,10 @@ class Dtomapper( this.søknadsbarn.first(), ) - return beregnBarnebidragApi - .beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) + val underholdBeregning = beregnBarnebidragApi.beregnNettoTilsynsutgiftOgUnderholdskostnad(grunnlag) + return underholdBeregning .finnAlleDelberegningUnderholdskostnad() - .tilUnderholdskostnadDto() + .tilUnderholdskostnadDto((underholdBeregning + grunnlag.grunnlagListe).toSet().toList()) } private fun Person.tilPersoninfoDto(rolle: Rolle?): PersoninfoDto {